我想做这样的事情:
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
将完整文件打印到标准输出。