当用户键入 'q' 时,我应该如何退出 python 脚本?
How should I be going about exiting python script when user types 'q'?
我正在尝试添加代码以在用户键入 q
时正确退出我的 curses python 脚本。我不能只做 CTRL+C
,因为这样 curses 就不会被正确地取消初始化。
我还没有找到一个很好的解决方案来获取有超时的用户输入,因此程序不会停在那里直到用户提供一些输入。
是否有创建第二个线程的简单方法,该线程只处理用户输入并可以请求主线程 运行 一个 de-init 函数?
建议的答案 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 中的功能)。
进一步阅读:
我正在尝试添加代码以在用户键入 q
时正确退出我的 curses python 脚本。我不能只做 CTRL+C
,因为这样 curses 就不会被正确地取消初始化。
我还没有找到一个很好的解决方案来获取有超时的用户输入,因此程序不会停在那里直到用户提供一些输入。
是否有创建第二个线程的简单方法,该线程只处理用户输入并可以请求主线程 运行 一个 de-init 函数?
建议的答案 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 中的功能)。
进一步阅读: