2017-07-21 6 views
0

サブプロセスを使用して、ターミナルから引数としてjsonディクショナリを渡そうとしています。辞書は、私が端末を手動で渡すときとは違うものになってしまいます。私は他のプログラムでそれを読んだとき、私はこれを取得する必要があり、サブプロセス引数としてjsonディクショナリを使用するpythonサブプロセス

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}

をこれが呼び出されたプログラムが引数を読み取り、JSON文字列に

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

答えて

1

辞書の変換をそれをoutputingされる方法でありますコロンの後ろにスペースを置きます。これは、スペースの前とスペースの後が異なる引き数に分割されることを意味します。これを動作させたい場合は、空白をstr(dictionary).replace(" ","") で置き換えてみてください。

+0

ありがとうございました –

+0

恐ろしいです!助けてうれしい!正解とマークする? –

+1

もっと良い解決策は、 'shell = True'を使わないことです:' subprocess.call( '' python '、' ../power_supply_gui/PowerSupplyControl.py '、json.dumps(...))) ' –

関連する問題