当用户输入' q&#39 ;?时,我应该如何退出python脚本?

时间:2016-07-31 23:42:12

标签: python curses python-curses

当用户键入q时,我正在尝试添加代码以正确退出我的curses python脚本。我不能只做CTRL+C,因为诅咒不会被正确地解除初始化。

我还没有找到一个很好的解决方案,让用户输入超时,所以程序不会坐在那里直到用户提供一些输入。

有没有一种简单的方法可以创建第二个线程来处理用户输入,并且可以请求主线程运行de-init函数?

1 个答案:

答案 0 :(得分:1)

建议的答案Python3 + Curses: How to press “q” for ending program immediately?是一个起点,但(就像使用单独的线程的建议一样)并不是我们需要的。

以下是一个例子,从前者开始:

import sys, curses, time

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

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

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

            time.sleep(1)
        except KeyboardInterrupt:
            curses.endwin()
            print "Bye"
            sys.exit()

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

当您按^C时,它会发送键盘中断。如果你抓住了,你可以告诉curses清理(并恢复终端模式)。之后,退出。

单独的线程不起作用,因为底层curses不太可能是线程安全的(并且不太可能有人使用Python中的这个功能)。

进一步阅读: