小编law*_*sea的帖子

如何优雅退出应用程序以twistd开始?

我有一个jabber客户端正在从它的stdin读取并发布PubSub消息.如果我在stdin上获得EOF,我想终止客户端.

我第一次尝试sys.exit(),但这会导致异常,客户端不会退出.然后我做了一些搜索,发现我应该打电话reactor.stop(),但我无法完成这项工作.我的客户端中的以下代码:

from twisted.internet import reactor
reactor.stop()
Run Code Online (Sandbox Code Playgroud)

结果是 exceptions.AttributeError: 'module' object has no attribute 'stop'

我需要做些什么才能导致扭曲关闭我的应用程序并退出?

编辑2

原始问题是由一些符号链接导致模块导入混乱引起的.解决了这个问题之后,我得到了一个新的例外:

twisted.internet.error.ReactorNotRunning: Can't stop reactor that isn't running.
Run Code Online (Sandbox Code Playgroud)

异常后,twistd关闭.我想这可能被调用造成MyClient.loopMyClient.connectionInitialized.也许我需要将电话推迟到以后?

编辑

这是.tac我客户的文件

import sys

from twisted.application import service
from twisted.words.protocols.jabber.jid import JID

from myApp.clients import MyClient

clientJID = JID('client@example.com')
serverJID = JID('pubsub.example.com')
password = 'secret'

application = service.Application('XMPP client')
xmppClient = client.XMPPClient(clientJID, password)
xmppClient.logTraffic = True
xmppClient.setServiceParent(application)

handler = MyClient(clientJID, serverJID, sys.stdin)
handler.setHandlerParent(xmppClient)
Run Code Online (Sandbox Code Playgroud)

我正在调用它 …

python twisted twisted.words twisted.application

12
推荐指数
2
解决办法
6304
查看次数