从另一个python脚本调用一个python脚本,参数存储在一个字符串中

时间:2014-04-08 09:15:57

标签: python subprocess

我试图从另一个调用Python脚本。我正在使用subprocess - 模块并将其称为:

subprocess.call(["python","script.py","parameter_name parameter_value"], shell=False)

当我以这种方式调用它时,它适用于单个参数。当我有多个参数时,我尝试以这种方式运行

subprocess.call(["python","script.py","parameter_one_name parameter_one_value", "parameter_two_name parameter_two_value"], shell=False)

由于某些原因,这不起作用,脚本也不会发出任何错误消息。所以,我试着这样做

os.system("python script.py parameter_one_name parameter_one_value parameter_two_name parameter_two_value)

这有效,脚本按预期工作。我的问题是当参数存储在字符串中时可以调用脚本吗? 例如,

parameter = parameter_one_name parameter_one_value+parameter_two_name parameter_two_value)

使用参数

执行脚本

到目前为止我找不到任何东西,所以如果有人能提供帮助,那将是一个很大的帮助。

2 个答案:

答案 0 :(得分:1)

您应该将每个参数的值作为列表中的单独项传递:

subprocess.call(["python","script.py","parameter_one_name","parameter_one_value", "parameter_two_name","parameter_two_value"], shell=False)

如果需要,您可以从较小的列表中编写参数列表:

param1 = ["parameter_one_name", "parameter_one_value"]
param2 = ["parameter_two_name", "parameter_two_value"]
subprocess.call(["python","script.py"] + param1 + param2, shell=False)

当您使用字符串中的单个参数+值调用它时,我不知道您的方案是如何工作的;它不应该,但如果没有看到你正在通过的实际值,就无法分辨。

答案 1 :(得分:1)

如果参数在字典d中:

import sys
import subprocess

params = [x for pair in d.items() if all(pair) for x in pair]
subprocess.check_call([sys.executable, 'script.py'] + params)