小能豆

如何清除 Python 中的 stdin

py

我想知道在输入某些键后是否可以清除 stdin。我按照这个论坛的回复执行了输入超时,如下所示:

 while True:
    web_scrapping()    
    print ("Press ENTER: \n")
    time.sleep(interval)
    i, o, e = select.select( [sys.stdin], [], [], 10 )
    if (i):
        Start()

如果工作正常,请检查是否已按下某个按键,如果按下,则转到 Start() 函数。但我的问题是 Start() 也有一个输入问题,因此 While True 中的前一个按键也传输到 Start(),因此结果是 Start() 中的输入问题由于前一个按键而显示两次。所以我想在转到 Start() 之前清除该按键。


阅读 22

收藏
2024-11-18

共1个答案

小能豆

这个很好,我相信如果你在 UNIX 系统上工作,你应该能够在调用stdin之前清除所有排队数据。尝试这样的操作:inputtermios

from termios import tcflush, TCIFLUSH

while True:
    web_scraping()
    print ("Press ENTER: \n")
    time.sleep(interval)
    i, o, e = select.select( [sys.stdin], [], [], 10 )
    if (i):
        # Clear queue before asking for new input
        tcflush(sys.stdin, TCIFLUSH)
        Start()

这样就可以在调用时获得一个新队列Start。注释下面示例中的第 13 行将调用input在调用时提交队列中找到的任何内容。在调用之前刷新队列有助于避免这种行为:

import select
import sys
import time
from termios import TCIFLUSH, tcflush

while True:
    print("Pretend I'm doing some stuff")
    time.sleep(2)
    i, o, e = select.select([sys.stdin], [], [], 2)
    # Enters if anything has been submitted
    if i:
        # Clear queue before asking for new input
        #   commenting it will submit whathever data is queued to stdin
        tcflush(sys.stdin, TCIFLUSH)
        a = input("Echo: ")
        print(f"your input is: {a}")
        break
    else:
        print("Nothing found in stdin")
2024-11-18