我试图从另一个调用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)
使用参数
执行脚本到目前为止我找不到任何东西,所以如果有人能提供帮助,那将是一个很大的帮助。
答案 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)