python-xmpp 和遍历收件人列表接收 IM 消息
我现在遇到一个问题,想请教一下我的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')把这些换行符去掉。