Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用存储在字符串中的参数从另一个python脚本调用一个python脚本_Python_Subprocess - Fatal编程技术网

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

使用存储在字符串中的参数从另一个python脚本调用一个python脚本,python,subprocess,Python,Subprocess,我试图从另一个调用Python脚本。我正在使用子流程-模块,并这样调用它: subprocess.call(["python","script.py","parameter_name parameter_value"], shell=False) 问题是,当我用这种方式调用它时,它对于一个参数工作得很好。当我有多个参数时,我尝试以这种方式运行它 subprocess.call(["python","script.py","parameter_one_name parameter_one_val

我试图从另一个调用Python脚本。我正在使用
子流程
-模块,并这样调用它:

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)
使用参数执行脚本


到目前为止,我找不到任何相关信息,因此如果有人能够提供帮助,那将是一个很大的帮助。

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

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)

当你用一个字符串中的单个参数+值调用它时,我不知道你的场景到底是如何工作的;不应该,但如果看不到您传递的实际值,就无法判断。

如果参数在字典
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)

嘿,谢谢大家看这个问题。使用os.system(“pythonscriptname.py”+“”+参数)成功了!当然,如果有更好的方法,请告诉我!在大多数情况下,最好导入模块(
import script
)并调用其中的各种函数(
result=script.func(arg1,arg2)
),而不是从另一个Python脚本中作为脚本运行。谢谢您的回答。这个场景是我通过Tkinter前端从用户那里获取输入值。我需要使用这些值调用脚本。这些值基本上是文件夹的路径。其中大多数是脚本的可选参数,根据用户在可选参数中给定的值,我需要调用脚本。因此,我将这些值作为键值对存储在字典中,并通过连接非空值的键值来调用脚本。当然,我首先只将非空值添加到字典中。再次感谢!谢谢你的回答。这很有趣!