从另一个脚本导入 python 脚本时,我想要受
经典保护的脚本代码if __name__ == "__main__":
....
....
要运行,我怎样才能运行该代码?
我想做的是从 python 脚本动态更改模块,然后导入一个现有脚本,该脚本应该看到所做的更改并运行其 __main__
代码,就像它被 python 直接调用一样?
我需要在与第一个 python 脚本相同的命名空间中执行第二个 python 脚本,并传递第二个脚本命令行参数。下面建议的 execfile() 可能有效,但不采用任何命令行参数。
我不想编辑第二个脚本(外部代码),因为我希望第一个脚本是它的包装器。
最佳答案
如果您可以编辑正在导入的文件,一种选择是遵循将重要代码放在函数中的基本原则。
# 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
关于Python动态导入脚本,需要有__name__ == "__main__"代码才能调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3092319/