gpt4 book ai didi

python - 你如何从没有结尾的管道中读取python中的标准输入

转载 作者:IT老高 更新时间:2023-10-28 20:37:27 25 4
gpt4 key购买 nike

当管道来自“打开”时,我无法从标准输入或 python 中的管道读取(不知道正确的名称)文件。

我有一个例子pipetest.py:

import sys
import time
k = 0
try:
for line in sys.stdin:
k = k + 1
print line
except KeyboardInterrupt:
sys.stdout.flush()
pass
print k

我运行了一个程序,该程序在一段时间后继续输出和 Ctrl+c

$ ping 127.0.0.1 | python pipetest.py
^C0

我没有输出。但是如果我通过一个普通的文件它就可以了。

$ ping 127.0.0.1 > testfile.txt

稍后按 Ctrl+c 结束

$ cat testfile.txt |  python pipetest.py

PING 127.0.0.1 (127.0.0.1) 56(84) bytes of data.
64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.017 ms
64 bytes from 127.0.0.1: icmp_seq=2 ttl=64 time=0.015 ms
64 bytes from 127.0.0.1: icmp_seq=3 ttl=64 time=0.014 ms
64 bytes from 127.0.0.1: icmp_seq=4 ttl=64 time=0.013 ms
64 bytes from 127.0.0.1: icmp_seq=5 ttl=64 time=0.012 ms

--- 127.0.0.1 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 3998ms
rtt min/avg/max/mdev = 0.012/0.014/0.017/0.003 ms
10

如何在程序结束之前获得任何输出,在这种情况下 ping 已经结束?

最佳答案

试试这个:

import sys
import time
k = 0
try:
buff = ''
while True:
buff += sys.stdin.read(1)
if buff.endswith('\n'):
print buff[:-1]
buff = ''
k = k + 1
except KeyboardInterrupt:
sys.stdout.flush()
pass
print k

关于python - 你如何从没有结尾的管道中读取python中的标准输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7091413/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com