我有一个GUI程序,也可以通过CLI控制(用于监控)。 CLI使用raw_input在while循环中实现。 如果我通过GUI关闭按钮退出程序,它会在raw_input中挂起,并且在获得输入之前不会退出。
如何在不输入输入的情况下立即中止raw_input?
我在WinXP上运行它,但我希望它与平台无关,它也应该在Eclipse中工作,因为它是一个开发人员工具。 Python版本是2.6。
我搜索了stackoverflow几个小时,我知道这个主题有很多答案,但是真的没有独立于平台的解决方案来拥有一个非阻塞的CLI阅读器吗?
如果没有,那么解决这个问题的最佳方法是什么?
由于
答案 0 :(得分:2)
这可能不是最佳解决方案,但您可以使用具有函数thread.interrupt_main()
的{{3}}。因此可以运行两个线程:一个使用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()
答案 1 :(得分:1)
根据您正在使用的GUI工具包,找到一种方法将事件监听器连接到关闭窗口操作并调用win32api.TerminateProcess(-1, 0)
。
作为参考,在Linux上调用sys.exit()
有效。