Pythonで渡されたコマンドライン引数を抽出しようとしています
cmdargs = str(sys.argv)
print cmdargs
それは印刷する
["E:/omation.py", "{"command":"sel_media","value":"5X7_phot
o_paper.png"},{"command":"tray","value":"4X6_photo_paper.png"}"]
これからどのように抽出することができますか? command
そして values
。 私はこの配列をループし、そしてcommndとvalue values.pleseのヘルプを取得する方法knoeをしない 注:私はまた、最初の値を破棄したい "E:/omation.py"
回答:
回答№1は1Pythonのutilsを使ってjson文字列を解析することができます:
import json
examples = json.loads("["+cmdargs[1]+"]")
最初のインポートでは、python用のjsonユーティリティが読み込まれます。次に、JSON文字列をPython辞書に解析するには、 json.loads
。この例では、あなたのjsonの1つを解析しました文字列をPython辞書に追加します。文字列を有効なjson配列に変換するには、 "["と "]"を追加することを忘れないでください。次に、次のようなコマンドと値を取得できます。
print(examples[0]["command"])
print(examples[0]["value" ])
回答№2の場合は1
あなたが与えた例では、2つのjsonオブジェクトがリストの2番目の要素cmdargs。おそらく、そのケースを取り込む最も簡単な方法は、その第2引数を正方形の中括弧で囲むことです。この場合、正規のJSONになり、結果のリストをループします。
import json
a = json.loads("["+cmdargs[1]+"]")
for p in a:
print "command is ", p["command"]
print "value is ", p["value"]
これはあなたが示した例に固有のものですが、あなたの目的に合わせてより堅牢にする必要があるかもしれません。
回答№3の場合は1
あなたの入力は有効なJSONではありません。引数を別々の有効なJSONオブジェクトとして渡す方法を見つける必要があります。次に、これを行うことができます:
# j.py
import json
import sys
print(sys.argv)
for arg in sys.argv[1:]:
j = json.loads(arg)
print(j.get("command"))
print(j.get("value"))
使用方法は次のとおりです。
$ python3 j.py "{"command":"sel_media","value":"5X7_photo_paper.png"}" "{"command":"tray","value":"4X6_photo_paper.png"}"
["j.py", "{"command":"sel_media","value":"5X7_photo_paper.png"}", "{"command":"tray","value":"4X6_photo_paper.png"}"]
sel_media
5X7_photo_paper.png
tray
4X6_photo_paper.png