从一个Python脚本调用另一个Python脚本,并传递存储在字符串中的参数
我正在尝试从一个Python脚本调用另一个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)
执行脚本并传入参数
到目前为止,我在Stack Overflow上没有找到相关的信息,如果有人能帮忙,那就太好了。
2 个回答
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
如果参数在一个字典 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)