python-xmpp并循环接收收件人列表和IM消息

时间:2010-05-12 02:45:08

标签: python xmpp xmpppy

我无法弄清楚这个问题,并想知道我的Python代码是否不正确,或者这是Python XMPP库的问题或设计限制。顺便说一句,我是Python的新手。

以下是有问题的代码片段。我想做的是以XMPP / Jabber ID格式读取IM收件人的文本文件,每行一个收件人。这被读入Python列表变量。

然后我实例化一个XMPP客户端会话并遍历收件人列表并向每个收件人发送一条消息。然后睡一段时间并重复测试。这用于负载测试收件人的IM客户端以及IM服务器。有一些代码可以交替处理从命令行输入而不是从文件中只接收一个收件人的情况。

最终发生的事情是Python会迭代/循环遍历列表,但只有列表中的最后一个收件人才会收到消息。切换收件人的顺序以进行验证。有点看起来像Python XMPP库没有正确发送它,或者我错过了库调用的一步,因为运行时调试打印语句表明循环正常工作。


recipient = ""
delay = 60
useFile = False
recList = []
...
elif (sys.argv[i] == '-t'):
  recipient = sys.argv[i+1]
  useFile = False
elif (sys.argv[i] == '-tf'):
  fil = open(sys.argv[i+1], 'r')
  recList = fil.readlines()
  fil.close()
  useFile = True
...
# disable debug msgs
cnx = xmpp.Client(svr,debug=[])
cnx.connect(server=(svr,5223))
cnx.auth(user,pwd,'imbot')
cnx.sendInitPresence()

while (True):
  if useFile:
    for listUser in recList:
      cnx.send(xmpp.Message(listUser,msg+str(msgCounter)))
      print "sending to "+listUser+" msg = "+msg+str(msgCounter)
  else:
    cnx.send(xmpp.Message(recipient,msg+str(msgCounter)))
  msgCounter += 1
  time.sleep(delay)

1 个答案:

答案 0 :(得分:2)

没关系,发现了问题。一个人必须注意file.readlines()返回的列表中元素的行末尾的换行符,所以我必须在发送时用元素上的.rstrip('\ n')去除它消息。