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

esk*_*ool 4 python import

从另一个脚本导入python脚本时,我想要受到经典保护的脚本代码

if __name__ == "__main__":  
    ....  
    ....
Run Code Online (Sandbox Code Playgroud)

要运行,我怎样才能运行该代码?

我想要做的是从一个python脚本,动态更改一个模块,然后导入一个现有的脚本,应该看到所做的更改并运行它的__main__代码,就像它是由python直接调用的?

我需要在与第一个python脚本相同的命名空间中执行第二个python脚本,并传递第二个脚本命令行参数.下面建议的execfile()可能有效,但不带任何命令行参数.

我宁愿不编辑第二个脚本(外部代码),因为我希望第一个脚本成为它的包装器.

FMc*_*FMc 6

如果您可以编辑正在导入的文件,一个选项是遵循将重要代码放入函数内部的基本原则.

# Your script.
import foo

foo.main()

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

if __name__ == "__main__":
    main()
Run Code Online (Sandbox Code Playgroud)

如果你不能编辑正在导入的代码,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
Run Code Online (Sandbox Code Playgroud)