Python,动态调用脚本

5
我希望能够在一个Python脚本中运行另一个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
2个回答

9
您可以使用__import__函数来动态导入模块,该函数可以帮助您实现这一功能。
module = __import__(sys.argv[1])

(您可能需要删除尾随的.py或在命令行上不指定它。)

来自Python文档:

__import __()的直接使用很少见,除非您想导入一个只在运行时才知道名称的模块。


谢谢Greg。如果你能展示如何在Python文件位于另一个目录而不是脚本的情况下执行此操作,将会得到额外奖励分数。 - Mike
2
@Mike: 确定,修改sys.path,可能像这样:sys.path.append("/your/module/directory") - Greg Hewgill

3

虽然__import__确实执行了指定的文件,但它也将其存储在Python模块列表中。如果您想重新执行相同的文件,则必须进行重新加载。

您还可以查看Python exec语句,它可能更适合您的需求。

来自Python文档:

此语句支持动态执行Python代码。第一个表达式应该评估为字符串、打开的文件对象或代码对象之一。


Python 3: exec - WillC

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接