如何从其他模块检查并调用Python __main__模块中符合规则的函数?
问题解答:在模块中调用__main__模块的特定前缀函数
完全可以实现,不需要将函数打包进类里。核心思路是直接获取__main__模块的对象,遍历其属性并筛选出符合条件的函数执行。
实现步骤与代码示例
1. 编写模块文件 my_module.py
import sys def run_all_auto(): # 获取__main__模块的对象 main_module = sys.modules['__main__'] # 遍历模块的所有属性名称 for attr_name in dir(main_module): # 筛选以auto_开头的属性 if attr_name.startswith('auto_'): attr_obj = getattr(main_module, attr_name) # 确认是可调用的函数,且是主模块自身定义的函数 if callable(attr_obj) and attr_obj.__module__ == '__main__': print(f"执行函数: {attr_name}") attr_obj()
2. 编写主脚本 main.py
import my_module # 定义符合前缀规则的函数 def auto_login(): print("执行自动登录逻辑") def auto_backup(): print("执行自动备份逻辑") # 定义不符合规则的函数(不会被调用) def manual_clean(): print("手动清理逻辑") if __name__ == "__main__": my_module.run_all_auto()
运行结果
执行main.py后,会输出:
执行函数: auto_login 执行自动登录逻辑 执行函数: auto_backup 执行自动备份逻辑
关键说明
- 无需传递
dir()参数,直接通过sys.modules['__main__']获取主模块对象是更可靠的方式,能直接拿到属性对应的实际对象,而非仅名称列表。 - 添加
attr_obj.__module__ == '__main__'判断,可避免误执行从其他模块导入的同名前缀函数,确保只运行主脚本自身定义的函数。
内容的提问来源于stack exchange,提问作者Zack
相关产品推荐
相关产品推荐

