在 Python 中如何从 stdin 读取数据直到管道进程终止?
In Python how do I read data from stdin until piped process terminates?
我想做这样的事情:
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 循环来迭代标准输入。
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
将完整文件打印到标准输出。
我想做这样的事情:
data = json.load(open(sys.argv[1]) if len(sys.argv) > 1 else sys.stdin)
对于这个例子可以减少到
data = json.load(sys.stdin)
但是 json.load
运行 一个 .read()
可能不包含我通过
generate_json_output | myprogram.py
是否有推荐的方法来读取 stdin
直到 generate_json_output
终止?我试图抓住 BrokenPipeError
但当我 运行
while True:
data += sys.stdin.read()
代替 while
循环,您可以使用如下所示的 for 循环来迭代标准输入。
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
将完整文件打印到标准输出。