Python 动态导入脚本,需调用其 __name__ == "__main__" 代码

5 投票
1 回答
1650 浏览
提问于 2025-04-16 00:17
if __name__ == "__main__":  
    ....  
    ....

我想从一个Python脚本中导入另一个脚本,但我希望被传统上保护起来的代码能够运行,应该怎么做呢?

我想要做的是,从一个Python脚本中动态地改变一个模块,然后导入一个已经存在的脚本,这个脚本应该能看到我做的更改,并像是直接被Python调用一样运行它的__main__代码。

我需要在第一个Python脚本的同一个命名空间中执行第二个Python脚本,并且传递命令行参数给第二个脚本。下面提到的execfile()可能有效,但它不支持任何命令行参数。

我更希望不去编辑第二个脚本(外部代码),因为我想让第一个脚本作为它的一个包装器。

1 个回答

6

如果你可以编辑被导入的文件,一个简单的方法就是把重要的代码放在函数里面。

# Your script.
import foo

foo.main()

# The file being imported.
def main():
    print "running foo.main()"

if __name__ == "__main__":
    main()

如果你不能编辑被导入的代码,execfile 提供了一种传递参数给导入代码的方式,但我对这种方法有点担心。使用时要小心。

# Your script.
import sys

import foo

bar = 999
sys.argv = ['blah', 'fubb']

execfile( 'foo.py', globals() )

# The file being exec'd.
if __name__ == "__main__":
    print bar
    print sys.argv

撰写回答