执行前,在模块上将__name__设置为'__main__'

时间:2017-01-16 19:42:23

标签: python python-3.x

我目前有代码检查if __name__ == '__main__'然后调用某些函数(如果是这种情况)。目前,我通过生成另一个python子进程来执行此代码,但将其作为模块导入更清晰。问题是这些模块中没有main函数正是在__name__ == '__main__'变化下执行的功能。我真正拥有的唯一选择是在执行模块之前设置__name__属性。这样做的最佳方式是什么?

2 个答案:

答案 0 :(得分:0)

我最终做的是以下内容:

imp_new_module = type(sys)
new_module = imp_new_module(module_name)
new_module.__dict__['__name__'] = '__main__'
exec(open(scriptname).read(), new_module.__dict__)

这类似于importlib内部的功能,但确实跳过了一些属性。

答案 1 :(得分:0)

使用runpy库。

runpy.run_module(module_name, run_name= "__main__")