怎么用脚本获取已加载模块

wen 实用脚本 2

本文目录导读:

怎么用脚本获取已加载模块

  1. Python 环境
  2. Node.js 环境
  3. PowerShell 环境
  4. Ruby 环境
  5. 通用脚本(跨平台)
  6. 注意事项

Python 环境

获取所有已加载模块

import sys
# 方法1:通过 sys.modules
loaded_modules = list(sys.modules.keys())
print("已加载模块数量:", len(loaded_modules))
print("前10个模块:", loaded_modules[:10])
# 方法2:查看详细信息
for name, module in list(sys.modules.items())[:5]:  # 只显示前5个
    print(f"模块名: {name}, 类型: {type(module).__name__}")

获取特定类型的模块

import sys
import types
# 只获取用户定义的模块(非内置)
user_modules = [
    name for name, mod in sys.modules.items()
    if hasattr(mod, '__file__') and mod.__file__ is not None
]
print("用户模块:", user_modules)

Node.js 环境

获取所有已加载模块

// 方法1:通过 require.cache
const loadedModules = Object.keys(require.cache);
console.log("已加载模块:", loadedModules);
// 方法2:获取详细信息
for (const [id, module] of Object.entries(require.cache)) {
    console.log(`模块ID: ${id}`);
    console.log(`模块文件: ${module.filename}`);
    console.log(`是否已加载: ${module.loaded}`);
}

获取模块树状结构

function getModuleTree() {
    const moduleTree = {};
    for (const [id, module] of Object.entries(require.cache)) {
        const parts = id.split('/');
        let current = moduleTree;
        for (const part of parts) {
            if (!current[part]) {
                current[part] = {};
            }
            current = current[part];
        }
    }
    return moduleTree;
}
console.log(JSON.stringify(getModuleTree(), null, 2));

PowerShell 环境

获取所有加载的模块

# 方法1:获取所有模块
Get-Module
# 方法2:获取详细列表
Get-Module | Select-Object Name, Version, ModuleType, ExportedCommands
# 方法3:获取已加载但未显式导入的模块(自动加载)
Get-Module -ListAvailable | Where-Object { $_.ModuleBase -like "*WindowsPowerShell*" }

获取加载的.NET程序集

[System.AppDomain]::CurrentDomain.GetAssemblies() | 
    Select-Object FullName, Location, IsDynamic

Ruby 环境

# 获取所有已加载的模块
loaded_features = $LOADED_FEATURES
puts "已加载文件数量: #{loaded_features.length}"
puts loaded_features.first(10)  # 显示前10个
# 获取当前加载的Gem
require 'rubygems'
Gem.loaded_specs.each do |name, spec|
  puts "#{name} (#{spec.version})"
end

通用脚本(跨平台)

#!/usr/bin/env python3
"""
跨平台模块检测脚本
"""
import sys
import os
def get_loaded_modules():
    """获取当前环境所有已加载模块"""
    modules_info = {
        'python': [],
        'node': [],
        'powershell': [],
        'ruby': []
    }
    # Python
    if 'python' in sys.executable or 'python3' in sys.executable:
        for name, mod in sys.modules.items():
            if mod:
                modules_info['python'].append({
                    'name': name,
                    'file': getattr(mod, '__file__', None),
                    'version': getattr(mod, '__version__', None)
                })
    return modules_info
if __name__ == "__main__":
    result = get_loaded_modules()
    for env, modules in result.items():
        if modules:
            print(f"\n{env.upper()} 环境已加载模块:")
            for mod in modules[:5]:  # 只显示前5个
                print(f"  - {mod['name']} (v{mod['version'] or 'N/A'})")

注意事项

  1. 性能影响:获取所有模块可能会影响性能,建议只获取需要的部分
  2. 内存占用:大型项目可能有数千个模块,注意不要一次性全部加载到内存
  3. 安全考虑:某些环境可能限制访问模块信息(如浏览器环境中)
  4. 动态加载:有些模块是延迟加载的,可能不会在初始列表中显示

选择适合你具体环境的脚本即可,需要针对特定环境的详细用法说明吗?

抱歉,评论功能暂时关闭!