2017-07-21 1 views
0

Ich versuche, ein JSON-Wörterbuch als ein Argument durch das Terminal mit einem Unterprozess übergeben. Das Wörterbuch bleibt anders als wenn ich es manuell durch das Terminal gebe. Ich verwende diesen Code für den UnterprozessPython-Subprozess mit JSON-Wörterbuch als Argument

Ich sollte das bekommen, wenn ich es in dem anderen Programm lese. { "CHANNEL": "d", "VOLT": "1", "CURRENTLIMIT": "1", "ENABLE": "1"}

sondern bekomme ich diesen

{CHANNEL : d, VOLT: 1, CURRENTLIMIT: 1, ENABLE: 1}

das ist, wie das Programm, das das Argument ist, das Lesen und outputing es

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

Antwort

1

die Umwandlung des Wörterbuchs zu einem jSON-String aufgerufen wird setzt ein Leerzeichen nach dem Doppelpunkt, was bedeutet, dass vor dem Leerzeichen und nach dem Leerzeichen in verschiedene Argumente aufgeteilt werden. Wenn Sie möchten, dass dies funktioniert, versuchen Sie, die Leerzeichen mit str(dictionary).replace(" ","") als Argument zu entfernen.

+0

Danke, dass es war –

+0

Super! Froh, dass ich Helfen kann! Als richtige Antwort markieren? –

+1

Eine vielleicht bessere Lösung ist es, 'shell = True' nicht zu verwenden:' subprocess.call (('python', '../power_supply_gui/PowerSupplyControl.py', json.dumps (...))) ' –