来自 xtalk.py 的 Python-XMPP 回溯
Posted
技术标签:
【中文标题】来自 xtalk.py 的 Python-XMPP 回溯【英文标题】:Python-XMPP traceback from xtalk.py 【发布时间】:2014-05-02 13:36:07 【问题描述】:我有 Ubuntu 12.10 和 Python 2.7,并且正在使用 python-xmpp 库 (xmpppy) 通过使用名为xsend.py的示例脚本,我可以连接到我的 XMPP 服务器 (ejabberd) 并向用户发送即时消息。
当我尝试使用测试脚本xtalk.py 时,我能够再次连接到 xmpp、auth 并发送消息。该脚本还应该允许我收到我正在向其发送消息的人的回复。
当我运行程序时,会发生这种情况:
root@domU:/home/ubuntu# python xtalk.py user@xmpp.mydomain.com
An error occurred while looking up _xmpp-client._tcp.xmpp.mydomain.com
connected with tls
authenticated using sasl
I am sending this message from xtalk.py to user@xmpp.mydomain.com
My message was recieved, and I'm sending another one now
That was recieved to. Now I'm going to reply to myself.
Traceback (most recent call last):
File "xtalk.py", line 77, in <module>
cl.Process(1)
File "/usr/lib/python2.7/dist-packages/xmpp/dispatcher.py", line 303, in dispatch
handler['func'](session,stanza)
File "xtalk.py", line 18, in xmpp_message
sys.stdout.write(event.getBody() + '\n')
TypeError: unsupported operand type(s) for +: 'NoneType' and 'str'
我不确定从哪里开始解决此问题。谁能给我小费?
具体情况是,我可以运行 xtalk.py 并向用户发送消息,但是一旦用户键入响应的第一个字母(使用 pigin 客户端),python 程序就会因该回溯而崩溃。
基本上,我可以使用此脚本发送消息,但无法接收回消息。我认为原因可能与 XMPP 通知该程序用户正在输入有关,因为直到我在 pigin 客户端中按下键以回复聊天时才会发生错误。如果我想回复“你好!”然后,只要我在 pigin 客户端上按 h,服务器上的 python 程序就会崩溃。我什至无法发送消息。
另外一个非常有趣的点:如果我在我的 android 上使用 Xabber 聊天客户端,我可以使用这个脚本进行两种方式的聊天。我只是不能用这个脚本和桌面 Pigin 客户端两种方式聊天......
【问题讨论】:
错误意味着event.getBody()
返回无 - 我不知道为什么您的活动中没有正文,但无论如何这是一个提示..
【参考方案1】:
问题在于 xtalk.py 中的这些行:
if type in ['message', 'chat', None] and fromjid == self.remotejid:
sys.stdout.write(event.getBody() + '\n')
它假定消息节总是包含一个<body>
标记(它包含消息的实际文本)。这是不正确的:例如,typing notifications 作为不(总是)包含正文的消息发送。
您应该将这些行替换为:
if type in ['message', 'chat', None] and fromjid == self.remotejid and event.getBody():
sys.stdout.write(event.getBody() + '\n')
【讨论】:
非常感谢,我会试试的!以上是关于来自 xtalk.py 的 Python-XMPP 回溯的主要内容,如果未能解决你的问题,请参考以下文章
连接期间的Python-xmpp HostUnknown错误
python-xmpp 并循环接收要接收的收件人列表和 IM 消息