我想知道在输入某些键后是否可以清除 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() 之前清除该按键。
这个很好,我相信如果你在 UNIX 系统上工作,你应该能够在调用stdin之前清除所有排队数据。尝试这样的操作:inputtermios
stdin
input
termios
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在调用时提交队列中找到的任何内容。在调用之前刷新队列有助于避免这种行为:
Start
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")