Python: 清除标准输入缓冲区
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都没有成功...
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缓冲区未清空而导致的问题。