我有一个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.loop在MyClient.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)
我正在调用它 …