带有if块的Python单行

时间:2017-01-20 21:40:50

标签: python command-line

我有一个从json接收数据的bash脚本。我想将json解析委托给python并使用bash操作其他东西。所以我尝试了以下内容并且有效:

$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文件。 我更喜欢使用单行代码来保持简单并以shell脚本存储在一起。

是否可以使用某些逻辑(如import json)和if块运行python one-liner?

1 个答案:

答案 0 :(得分:5)

这里已经回答了类似的问题: Executing Python multi-line statements in the one-line command-line。简而言之,使用有趣的$''引用(它解释像\n这样的转义)应该可以工作,至少在bash中是这样的:

$ 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