Python:如何在阻塞raw_input时退出CLI?

时间:2011-01-04 08:55:02

标签: python windows blocking command-line-interface raw-input

我有一个GUI程序,也可以通过CLI控制(用于监控)。 CLI使用raw_input在while循环中实现。 如果我通过GUI关闭按钮退出程序,它会在raw_input中挂起,并且在获得输入之前不会退出。

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

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

我搜索了stackoverflow几个小时,我知道这个主题有很多答案,但是真的没有独立于平台的解决方案来拥有一个非阻塞的CLI阅读器吗?

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

由于

2 个答案:

答案 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()有效。