Python: 清除标准输入缓冲区

16 浏览
0 Comments

Python: 清除标准输入缓冲区

这可能是一个初学者的问题,但我找不到解决方法!

我需要清除Python中的stdin缓冲区。

想象一下,我有以下的bash脚本运行:

i=0
for (( ; ; ))
do
    echo "$i"
    ((i++))
done

通过命令行运行如下:./loop.sh | python myProg.py

在myProg.py中,我希望有以下内容:

count = 100
f = fileinput.input()
while True:
    sleep(2)
    # 清除stdin ...
    # 并读取最新的100行
    i = 0
    while i < count:
        myBuffer[i] = f.readline()
        if len(myBuffer[i]) > 0:
            i += 1
    print myBuffer

我认为我不能在读取所有行之前就直接读取它们,因为它们以很高的速度输出,如果sleep(目前只是为了测试)几分钟的话,这似乎很愚蠢... 有没有办法在Python中设置stdin缓冲区的大小?或者只是截断/清除它?顺便说一句,我正在使用Python 2,所以没有bufsize参数。

我在这里看过:How to avoid Python fileinput buffering

有没有Python的方法来做这个?但我也会尝试unbuffer:https://unix.stackexchange.com/questions/25372/turn-off-buffering-in-pipe

更新:

unbuffer或stdbuf都没有成功...

0
0 Comments

Python: 清空stdin缓冲区

在使用Python编程过程中,有时候我们需要清空stdin缓冲区。下面的代码示例展示了一个解决这个问题的方法。

import sys
def clear_stdin():
    try:
        while True:
            sys.stdin.read(1)
    except KeyboardInterrupt:
        pass
if __name__ == "__main__":
    clear_stdin()

这段代码通过不断地读取stdin缓冲区中的字符来清空缓冲区。当用户按下Ctrl+C时,程序会捕获KeyboardInterrupt异常,从而停止读取并退出。

我们可以将这段代码保存为一个单独的Python脚本文件,然后在需要清空stdin缓冲区的地方调用该脚本。

这种方法可以解决因为stdin缓冲区未清空而导致的问题。

0