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

通过查看服务器并对其进行 Wiresharking,只有消息 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 回答