我想做这样的事情:
data = json.load(open(sys.argv[1]) if len(sys.argv) > 1 else sys.stdin)
在这个例子中可以减少到
data = json.load(sys.stdin)
但是json.load
运行一个.read()
可能不包含我通过提供的整个JSON字符串的单个
generate_json_output | myprogram.py
有没有建议的读取方式,stdin
直到generate_json_output
终止?我试着赶上,BrokenPipeError
但跑步时却没有提高
while True:
data += sys.stdin.read()
除了while
循环以外,您可以使用如下所示的for循环遍历stdin。
import sys
data = ''
for line in sys.stdin:
data += line
可以写成一个表达式:
data = "".join(sys.stdin)
使用通过管道生成的输入来运行它会读取标准输入,直到终止。
t.json:
{
'a': 2,
'b': 3
}
运行cat t.json | python a.py
将完整的文件打印到stdout。
这和我希望的一样简单:)较短的版本:
data = "".join(sys.stdin)