2017-01-20 14 views
1

jsonからデータを受け取るbashスクリプトがあります。 jsonの解析をPythonに任せ、bashで他のものを操作したいと思います。だから私は、次のことを試してみました、それが働いた:ifブロック付きのPython one-liner

$cat json.txt | python -c "import sys, json; app_data=json.load(sys.stdin); print app_data['item'][0]['id'];" 

私は、リストのサイズを確認することを決めた:

$cat json.txt | python -c 'import sys, json; app_data=json.load(sys.stdin); if len(app_data['item'])==1: print '1 item:'; print app_data['item'][0]['id']' 

それはでSyntaxErrorで失敗しました:無効な構文を。

リストサイズのチェック(上記のコード)は、一般的に別の.pyファイルから機能します。 シンプルにして、シェルスクリプトで一緒に保存するために、ワンライナーを使用することをお勧めします。

いくつかのロジック(import jsonのような)を使って1行のPythonを実行することは可能ですか?

答えて

3

同様の質問はすでにここで回答済みです: Executing Python multi-line statements in the one-line command-line要するに、面白い$''少なくともbashで、動作する必要があり(\nようなエスケープを解釈する)引用使用:

$ cat json.txt 
{"item": [{"id": 1}]} 

$ cat json.txt | python -c $'import sys, json;\nd=json.load(sys.stdin)\nif len(d["item"])==1: print("""1 item:\n%s""" % d["item"][0]["id"])' 
1 item: 
1 

構文POVから、問題は、Pythonのみ程度のセパレータとして;を使用することができることですsimple_stmtと呼ばれます。しかし、if_stmtは簡単な記述ではありません。 https://docs.python.org/2/reference/simple_stmts.html#grammar-token-simple_stmtを参照してください。

関連する問題