繁体   English   中英

在Python Twisted线程中使用Cmd模块

[英]Using Cmd module inside a Python Twisted thread

参考这个问题 ,我需要运行一个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()

一切都很好,但是当执行quit命令时,控制台挂起直到我按下Ctrl + c,如果我在执行退出之前按Ctrl + c,控制台也会挂起,直到我执行quit命令。

当我从CommandProcessor()。cmdloop退出时,似乎反应堆仍在工作,如果这是问题,我需要一种方法在我的线程结束时停止反应堆。

调用reactor.stop来终止twisted事件循环。 CommandProcess.do_quit在一个独立的线程中运行; reactor.stop应使用被称为reactor.callFromThread


do_quit方法中添加do_quit reactor.callFromThread(reactor.stop) do_quit reactor.callFromThread(reactor.stop)

def do_quit(self, line):
    print 'bye bye !'
    reactor.stop() # <------
    return True

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM