【发布时间】:2010-09-23 19:31:11
【问题描述】:
我想从另一个 Python 脚本运行一个 Python 脚本。我想像使用命令行一样传递变量。
例如,我将运行我的第一个脚本,该脚本将遍历值列表 (0,1,2,3) 并将这些值传递给第二个脚本 script2.py 0 然后 script2.py 1 等。
我发现Stack Overflow question 1186789 是一个类似的问题,但是 ars 的答案调用了一个函数,因为我想运行整个脚本,而不仅仅是一个函数,而 balpha 的答案调用了脚本但没有参数。我将其更改为以下内容作为测试:
execfile("script2.py 1")
但它没有正确接受变量。当我在 script2.py 中打印出sys.argv 时,它是对第一个脚本“['C:\script1.py'] 的原始命令调用。
我真的不想更改原始脚本(即我的示例中的 script2.py),因为我不拥有它。
我认为一定有办法做到这一点;我只是很困惑你是怎么做到的。
【问题讨论】:
-
如果 os.system 对您来说不够强大,可以使用 the subprocess module。
-
问题是你是知道脚本的名字(然后导入它)还是在编程时不知道脚本的名字(然后使用subprocess.call)。在第二种情况下,这个问题也不会重复。因为问题没有说清楚,所以也不是很好。
-
@Trilarion:错了。你可以导入一个 python 模块,即使它的名字是在运行时生成的。
-
@Trilarion:为什么要覆盖它?两个问题中的名称都是固定的。无论如何,语句 “如果您在编程时不知道脚本的名称(然后使用 subprocess.call)。” 无论如何都是错误的。如果您有新问题; ask.
-
@Oli4 “肯定”是一个强词。需要详细说明吗?我看到 subprocess.call() 解决方案接受传递多个命令行参数。我看到在定义 main() 函数的情况下提到了
import(它对 OP 没有帮助,但对于许多其他有类似问题的人来说,这是正确的方法)。我看到 Python 2 的 execfile() 使用了你放入sys.argv的任何内容(诚然,最后一点没有明确提到)——初学者应该忽略这个选项。甚至还有一个带有多个参数的显式 os.system() 答案(此处接受的答案)。
标签: python