2013-10-30 79 views
0

鑑於以下代碼:的Python telnetlib telnet.write()丟棄消息

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的

+0

對於初學者來說,你的代碼包含很多語法錯誤。你不能使用'pass'作爲變量名,它是保留的。另外,您的'for'語句中不需要括號。 – aIKid

回答

0

您需要閱讀回來防止插座堵塞的文本。這就是爲什麼你的其他方法有效。

在現實世界中的會話,你將總是讀回日誌記錄的結​​果,命令和。

+0

你的回答似乎不對。在其他情況下,它是有效的,如果我一個接一個地寫10個'write'命令而不讀取(不在函數中),它就可以工作。此外,沒有關於你說什麼的文檔。 – user2162550

+0

此外,通過查看wireshark在可以工作的情況下,我可以看到它需要一些'write()'命令,並將它們的內容作爲一個包傳遞,而不是用python編碼的方式,所以爲什麼不它發生在這裏? – user2162550