使用JSON字典作为参数的Python子流程

使用JSON字典作为参数的Python子流程,python,json,dictionary,subprocess,Python,Json,Dictionary,Subprocess,我正在尝试使用子流程将JSON字典作为参数传递给终端。当我手动通过终端传递字典时,它的结果总是不同的。我将此代码用于子流程: subprocess.call("python ../power_supply_gui/PowerSupplyControl.py "+ "{\"CHANNEL\":\"d\",\"VOLT\":\"1\",\"CURRENTLIMIT\":\"1\",\"ENABLE\":\"1\"}",shell=True) 当我在另一个程序中读到它时,我应该会得到这个: {"CH

我正在尝试使用
子流程
将JSON字典作为参数传递给终端。当我手动通过终端传递字典时,它的结果总是不同的。我将此代码用于
子流程

subprocess.call("python ../power_supply_gui/PowerSupplyControl.py "+ "{\"CHANNEL\":\"d\",\"VOLT\":\"1\",\"CURRENTLIMIT\":\"1\",\"ENABLE\":\"1\"}",shell=True)
当我在另一个程序中读到它时,我应该会得到这个:

{"CHANNEL":"d","VOLT":"1","CURRENTLIMIT":"1","ENABLE":"1"}
但是,我得到的是:

{CHANNEL:d,VOLT:1,CURRENTLIMIT:1,ENABLE:1}
这是被调用的程序读取参数并输出参数的方式:

print sys.argv[1]
print type(sys.argv[1])
commandDictionary=json.loads(sys.argv[1]) 

将字典转换为json字符串时,在冒号后面放一个空格,这意味着空格之前和空格之后被拆分为不同的参数。如果您希望这样做,请尝试使用
str(字典)删除空格。替换(“,”)

作为参数。

将字典转换为json字符串时,在冒号后面放一个空格,这意味着空格之前和空格之后被分成不同的参数。如果您希望这样做,请尝试使用
str(字典)删除空格。替换(“,”)

作为论据。

谢谢你,也许更好的解决方案是不使用
shell=True
subprocess.call(('python','../power\u supply\u gui/PowerSupplyControl.py',json.dumps(…))
@AnthonySottile是的,它工作得更好。谢谢。谢谢你。也许更好的解决方案是不要使用
shell=True
子进程调用(('python','../power\u supply\u gui/PowerSupplyControl.py',json.dumps(…)))
@AnthonySottile-yep,它工作得更好。非常感谢。