0

問題を理解できず、Pythonコードが正しくないかどうか、またはこれがPythonXMPPライブラリの問題または設計上の制限であるかどうかについての入力が必要です。ちなみに私はPythonを初めて使用します。

以下に問題のコードの抜粋を示します。私がやりたいのは、IM受信者のテキストファイル(1行に1人の受信者)をXMPP /JabberID形式で読み取ることです。これはPythonリスト変数に読み込まれます。

次に、XMPPクライアントセッションをインスタンス化し、受信者のリストをループして、各受信者にメッセージを送信します。その後、しばらく寝て、テストを繰り返します。これは、受信者のIMクライアントとIMサーバーの負荷テスト用です。ファイルからではなく、コマンドライン入力から1人の受信者のみを取得する場合を交互に処理するコードがあります。

最終的に発生するのは、Pythonがリストを反復/ループしますが、リストの最後の受信者だけがメッセージを受信するということです。受信者の順序を切り替えて確認します。Python XMPPライブラリが正しく送信していないように見えます。または、実行時のdebug printステートメントがループが正しく機能していることを示しているため、ライブラリ呼び出しの手順がありません。


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)
4

1 に答える 1

2

問題が見つかりました。file.readlines() によって返されるリスト内の要素の行末にある改行文字に注意する必要があるため、送信時に要素の .rstrip('\n') で削除する必要がありましたメッセージを出します。

于 2010-05-12T03:22:50.187 に答える