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

问题描述 投票:0回答:1

我想做这样的事情:

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()
python-3.x pipe stdin
1个回答
1
投票

代替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将完整文件打印到标准输出。

© www.soinside.com 2019 - 2024. All rights reserved.