我想从另一个内部运行python脚本。在内部,我的意思是来自子脚本的任何状态更改都会影响父级的状态。因此,如果在子项中设置了变量,则会在父项中更改它。
通常你可以做类似
的事情import module
但问题是这里运行的子脚本是父脚本的参数,我认为你不能使用带变量的导入
像这样的东西
$python run.py child.py
这将是我期望发生的事情
#run.py
#insert magic to run argv[1]
print a
#child.py
a = 1
$python run.py child.py
1
答案 0 :(得分:9)
您可以使用__import__
功能,该功能允许您动态导入模块:
module = __import__(sys.argv[1])
(您可能需要删除尾随.py
或不在命令行中指定它。)
来自Python文档:
直接使用
__import__()
的情况很少见,除非您要导入名称仅在运行时已知的模块。
答案 1 :(得分:1)
虽然__import__
当然执行指定的文件,但它也将它存储在python模块列表中。如果要重新执行同一个文件,则必须重新加载。
您还可以查看更适合您需求的python exec
语句。
来自Python文档:
此语句支持Python代码的动态执行。第一个表达式应该计算为字符串,打开文件对象或代码对象。