Python 蟒蛇3+;诅咒:如何按下;q";马上结束节目?

Python 蟒蛇3+;诅咒:如何按下;q";马上结束节目?,python,python-3.x,ncurses,curses,python-curses,Python,Python 3.x,Ncurses,Curses,Python Curses,当我运行下面的示例代码并只按“q”键时,它将正确结束, 但是,如果我按下任何其他字符“例如许多中断和许多其他字符”,然后按下“q”,它将不会退出,我如何解决这个问题 import curses, time def main(sc): sc.nodelay(1) while True: sc.addstr(1, 1, time.strftime("%H:%M:%S")) sc.refresh() if sc.getch() ==

当我运行下面的示例代码并只按“q”键时,它将正确结束, 但是,如果我按下任何其他字符“例如许多中断和许多其他字符”,然后按下“q”,它将不会退出,我如何解决这个问题

import curses, time

def main(sc):
    sc.nodelay(1)

    while True:
        sc.addstr(1, 1, time.strftime("%H:%M:%S"))
        sc.refresh()

        if sc.getch() == ord('q'):
            break

        time.sleep(1)

if __name__=='__main__': curses.wrapper(main)

按其他键会导致
时间。睡眠(1)
呼叫,您应该等待
n
秒(
n
=其他按键的笔划数)

删除
time.sleep
呼叫将解决您的问题

def main(sc):
    sc.nodelay(1)

    while True:
        sc.addstr(1, 1, time.strftime("%H:%M:%S"))
        sc.refresh()

        if sc.getch() == ord('q'):
            break

        #time.sleep(1) <------
该函数很可能就是您正在寻找的函数。设置超时后,
getch
将等待
delay
毫秒,然后返回-1


虽然使用
time.sleep(seconds)
可以工作,
timeout
更干净,并且由于
sleep
将用户输入的处理延迟了
seconds

非常感谢@falsetru的及时回复,但正如我提到的,这是一个示例代码,我的真实代码是一款带有超时/刷新时间选项的顶级应用程序,因此我必须在代码中使用sleep来匹配定义的超时。@M.Adel,有条件地调用
time.sleep
怎么样?(仅当未按下任何键时:
sc.getch()
返回
-1
)@falsetru出色!!请粘贴它作为答案,让我接受它,非常感谢你们的帮助。
while True:
    sc.addstr(1, 1, time.strftime("%H:%M:%S"))
    sc.refresh()

    key = sc.getch()
    if key == ord('q'):
        break
    elif key < 0:
        time.sleep(1)