请参阅此question,我需要运行一个Cmd控制台应用程序,该应用程序将使用Python的Twisted框架进行网络查询,并使用以下示例:
from cmd import Cmd
from twisted.internet import reactor
class CommandProcessor(Cmd):
def do_quit(self, line):
print 'bye bye !'
return True
def do_hello(self, line):
print 'world'
if __name__ == "__main__":
reactor.callInThread(CommandProcessor().cmdloop)
reactor.run()
一切都很好用,但是当执行退出命令时,控制台会挂起,直到我按下Ctrl + c,如果我在执行退出之前按下Ctrl + c,则相同控制台也会挂起,直到我执行退出命令。
当我从 CommandProcessor()。cmdloop 退出时,似乎反应堆仍在工作,如果这是问题,我需要一种方法在我的线程结束时停止反应堆。
答案 0 :(得分:2)
调用reactor.stop
以终止扭曲事件循环。 CommandProcess.do_quit
在一个单独的线程中运行;应使用reactor.callFromThread
reactor.stop
在reactor.callFromThread(reactor.stop)
方法中添加do_quit
。
def do_quit(self, line):
print 'bye bye !'
reactor.stop() # <------
return True