python-xmpp 和遍历收件人列表接收 IM 消息

0 投票
1 回答
1076 浏览
提问于 2025-04-15 22:36

我现在遇到一个问题,想请教一下我的Python代码是不是有错误,或者说这是Python XMPP库的一个问题或设计限制。顺便说一下,我刚开始学Python。

下面是我在用的代码片段。我想做的是读取一个文本文件,里面有IM接收者的列表,每行一个,格式是XMPP/Jabber ID。然后把这些接收者读入一个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 个回答

2

没关系,我找到了问题所在。使用file.readlines()读取文件时,列表中的每一行末尾可能会有换行符,所以在发送消息时,我需要用.rstrip('\n')把这些换行符去掉。

撰写回答