python-xmpp и циклический просмотр списка получателей для получения и сообщения IM - PullRequest
0 голосов
/ 12 мая 2010

Я не могу выяснить проблему и хочу получить информацию о том, является ли мой код Python неправильным, или это проблема или ограничение дизайна библиотеки Python XMPP. Кстати, я новичок в Python.

Ниже приведены фрагменты кода, о котором идет речь. То, что я хотел бы сделать, это прочитать в текстовом файле получателей чата, по одному получателю на строку, в формате 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 голосов
/ 12 мая 2010

Неважно, нашел проблему. Нужно следить за символами новой строки в конце строки для элементов в списке, возвращаемом функцией file.readlines (), поэтому мне пришлось вырезать его с помощью .rstrip ('\ n') для элемента при отправке исходящее сообщение.

...