温馨提示:本文翻译自stackoverflow.com,查看原文请点击:pipe - In Python how do I read data from stdin until piped process terminates?
pipe python-3.x stdin

pipe - 在Python中,如何从标准输入读取数据,直到管道进程终止?

发布于 2020-03-27 15:41:50

我想做这样的事情:

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()

查看更多

查看更多

提问者
frans
被浏览
95
6,021 2020-01-31 16:24

除了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。