从一个Python脚本调用另一个Python脚本,并传递存储在字符串中的参数

2 投票
2 回答
5744 浏览
提问于 2025-04-18 01:50

我正在尝试从一个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)

撰写回答