我有一个主文件正在查看/ modules /文件夹中的文件,它需要查看每个.py文件并查找具有特定属性的所有函数。 一个示例模块将是这样的:
def Command1_1():
True
Command1_1.command = ['cmd1']
def Command1_2():
True
我目前用来查看每个文件和函数的代码是:
for module in glob.glob('modules/*.py'):
print(module)
tree = ast.parse(open(module, "rt").read(), filename=PyBot.msggrp + module)
for item in [x.name for x in ast.walk(tree) if isinstance(x, ast.FunctionDef)]:
if item is not None:
print(str(item))
下面是代码生成的内容,但我找不到一种方法来显示函数是否具有" .command"属性:
modules/Placeholder001.py
Command1_1
Command1_2
modules/Placeholder002.py
Command2_1
Command2_2
Command2_3
答案 0 :(得分:0)
最简单的方法是导入每个文件,然后在其全局范围内查找函数。可以使用callable
来识别函数。检查函数是否具有属性可以使用hasattr
完成。
从路径导入模块的代码取自this answer。
from pathlib import Path
import importlib.util
def import_from_path(path):
spec = importlib.util.spec_from_file_location(path.stem, str(path))
module = importlib.util.module_from_spec(spec)
spec.loader.exec_module(module)
return module
for module_path in Path('modules').glob('*.py'):
module = import_from_path(module_path)
for name, value in vars(module).items():
if callable(value):
has_attribute = hasattr(value, 'command')
print(name, has_attribute)
输出:
Command1_1 True
Command1_2 False