Python动态导入脚本,需要有__name__ == "__main__"代码才能调用

标签 python import

从另一个脚本导入 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/

相关文章:

python - Vbscript 函数/子调用的正则表达式

ios - Objective-C - 避免导入循环

css - 在 Weebly 中导入 Twitter Bootstrap 模板

javascript - Typescript import index.ts 不是一个模块

html - 当后缀不是 .css 时,@import 不起作用?

xml - 将包含多个工作表的 Excel 2003 xml 文件导入 Microsoft Dynamics 2011

python - 如何使 python tkinter 输出显示在 GUI 而不是 python shell 中?

python - 在python中使用selenium使用IE webdriver,无需设置安全模式

python - 如何简化networkx图?

python - 移动到 ReportLab 中的下一帧