【发布时间】:2016-08-20 07:24:32
【问题描述】:
我知道将标准输入管道传输到 shell 中的下游进程的基础知识,只要将每一行单独处理或作为一个输入,我就可以让我的管道工作。
但是当我想读 4 行标准输入,做一些处理,再读 6 行,然后做同样的事情时,我对管道的理解有限就成了一个问题。
例如,在下面的管道中,每次 curl 调用都会产生未知数量的输出行,这些行构成一个 JSONObject:
cat geocodes.txt \
| xargs -I% -n 1 curl -s 'http://maps.googleapis.com/maps/api/geocode/json?latlng='%'&sensor=true' \
| python -c "import json,sys;obj=json.load(sys.stdin);print obj['results'][0]['address_components'][3]['short_name'];"
如何每次python 调用只消耗一个 JSONObject?请注意,我实际上在 Python 方面的经验可以忽略不计。我实际上对Node.js 有更多经验(使用Node.js 处理JSON curl 输出会更好吗?)
Geocodes.txt 类似于:
51.5035705555556,-3.15153263888889
51.5035400277778,-3.15153477777778
51.5035285833333,-3.15150258333333
51.5033861111111,-3.15140833333333
51.5034980555556,-3.15146016666667
51.5035285833333,-3.15155505555556
51.5035362222222,-3.15156338888889
51.5035362222222,-3.15156338888889
编辑 我有一种讨厌的感觉,答案是你需要逐行阅读并在解析之前检查你是否有一个完整的对象。有什么功能可以帮我完成繁重的工作吗?
【问题讨论】:
标签: python json node.js stdin xargs