Python:如果在阻塞raw_input的情况下退出CLI?

我有一个GUI程序,也应该可以通过CLI控制(用于监视)。 CLI在使用raw_input的while循环中实现。 如果我通过GUIclosuresbutton退出程序,它会挂在raw_input上,并且在获取input之前不会退出。

如何在不inputinput的情况下立即中止raw_input?

我在WinXP上运行它,但我希望它是平台独立的,它也应该在Eclipse中工作,因为它是一个开发工具。 Python版本是2.6。

我search了几个小时的stackoverflow,我知道这个话题有很多答案,但是真的没有独立于平台的解决scheme来使用非阻塞的CLI阅读器吗?

如果没有,解决这个问题的最好方法是什么?

谢谢

Solutions Collecting From Web of "Python:如果在阻塞raw_input的情况下退出CLI?"

这不是最好的解决方案,但可以使用具有函数thread.interrupt_main()的线程模块 。 所以可以运行两个线程:一个用你的raw_input方法,一个可以给出中断信号。 上层线程引发KeyboardInterrupt异常。

 import thread import time def main(): try: m = thread.start_new_thread(killable_input, tuple()) while 1: time.sleep(0.1) except KeyboardInterrupt: print "exception" def killable_input(): w = thread.start_new_thread(normal_input, tuple()) i = thread.start_new_thread(wait_sometime, tuple()) def normal_input(): s = raw_input("input:") def wait_sometime(): time.sleep(4) # or any other condition to kill the thread print "too slow, killing imput" thread.interrupt_main() if __name__ == '__main__': main() 

根据您使用的GUI工具包,找到一种方法将事件侦听器连接到关闭窗口动作,并使其调用win32api.TerminateProcess(-1, 0)

作为参考,在Linux上调用sys.exit()作品。