如何在运行模块时生成__name__ =='__ main__'

时间:2011-05-24 17:14:14

标签: python

更具体地说,我有一个文件

file file1.py:

if __name__ == '__main__':
    a = 1

从文件file2.py,我想做类似

的事情
import file1
print file1.a

不修改file1.py

4 个答案:

答案 0 :(得分:4)

import imp
m = imp.find_module('file1')
file1 = imp.load_module('__main__', *m)

话虽如此,你应该考虑修改file1.py而不是使用这个黑客。

答案 1 :(得分:4)

from runpy import run_module
data = run_module("file1", run_name="__main__")
print data["a"]

你不需要乱用导入内部来做这样的事情(作为一个额外的好处,你将避免阻止访问你的真正的 __main__模块命名空间)

答案 2 :(得分:3)

你不能;这首先是主要哨兵的目的。如果在主要哨兵中定义的变量在它之外是有用的,那么它们应该在它之外被定义为开始。

答案 3 :(得分:0)

您需要在a范围之外声明if __name__ == '__main__'。现在,它只存在于if块的范围内。

a = 0
if __name__ == '__main__':
    a = 1