Python中的stdin有多清晰

2024-06-26 14:56:40 发布

您现在位置:Python中文网/ 问答频道 /正文

我想知道在输入某个键后,是否可以清除stdin。 我正在做一个输入超时,下面是这个论坛的回复:

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

如果工作正常,检查是否按下了某些按键,如果按下,则转到功能开始()。 但我的问题是Start()也有一个输入问题,因此While True中的上一次击键也会传输到Start(),因此结果是Start()中的输入问题显示两次,因为上一次击键。 因此,我想在转到Start()之前清除该击键。可能吗? 谢谢


Tags: webtruetimestdinsleepselectstart论坛
1条回答
网友
1楼 · 发布于 2024-06-26 14:56:40

这是一个好方法,我相信如果您在UNIX系统上工作,您应该能够在使用^{}调用input之前清除stdin中的任何排队数据。试着这样做:

from termios import tcflush, TCIFLUSH

while True:
    web_scrapping()    
    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")

相关问题 更多 >