0

次のコードがあるとします。

import telnetlib
import sys
def func1(IP,user,passw):
    t=telnetlib.Telnet(IP)
    t.write(user.encode('ascii')+b'\n')
    t.write(passw.encode('ascii')+b'\n')
    return t

def func2(t,command):
    t.write(command.encode('ascii')+b'\n')
    print(command)

user=sys.argv[1]
passw=sys.argv[2]
IP=sys.argv[3]
t=func1(IP,user,passw)
for i in range(6):
    func2(t, "message "+str(i))

サーバーを調べて Wireshark すると、メッセージ 1 と 2 だけが通過します。

さて、func2(t,command)次のように関数を変更すると:

def func2(t,command):
    t.write(command.encode('ascii')+b'\n')
    t.read_eager()   #This is the new line.
    print(command)

すべて正常に動作し、すべてのメッセージが送信されました。

何か案が?

Python3.3 WindowsXP

4

1 に答える 1

0

ソケットのブロックを防ぐために、戻ってくるテキストを読む必要があります。これが、他の方法が機能する理由です。

実際のセッションでは、ログインとコマンドの結果を常に読み返すことになります。

于 2013-10-30T06:44:52.247 に答える