2011-04-03 100 views
0

我正在使用telnetlib作爲簡單的telnet腳本到Juniper交換機。下面是我的代碼:telnetlib和「buf = self.sock.recv(50)」錯誤

import telnetlib 

HOST = raw_input("Enter host IP address: ") 
USER = raw_input("Enter Username: ") 
PWD = raw_input("Enter Password: ") 
TNT = telnetlib.Telnet(HOST, 23, 10) 
TNT.read_until("login:") 
TNT.write(USER.encode('ascii') + "\n") 
TNT.read_until("Password:") 
TNT.write(PWD.encode('ascii') + "\n") 
TNT.write("set cli screen-length 10000\nconfigure\nshow\nexit\n") 
print (TNT.read_all().decode('ascii')) 
TNT.close() 
raw_input ("Press any Key to Quit: ") 

每當我運行此程序與瞻博網絡交換機它給我這個錯誤:

Traceback (most recent call last): 
    File "D:\Python\AuTel Project\Old versions and tials\Telnet (Python 2.7) V1.4.py", line 17, in <module> 
    print (TNT.read_all().decode('ascii')) 
    File "C:\Python27\lib\telnetlib.py", line 325, in read_all 
    self.fill_rawq() 
    File "C:\Python27\lib\telnetlib.py", line 516, in fill_rawq 
    buf = self.sock.recv(50) 
timeout: timed out 

我已經與思科和北電之前遇到這個問題,但我可以戰勝它思科的「terminal lenght 0」命令和北電的類似命令。我試圖在瞻博網絡上使用等價命令(set cli screen-length),但是我仍然得到相同的錯誤。我需要知道這個錯誤的含義是什麼,它的原因是什麼,以及如何克服它。

最好的問候,

回答

0

錯誤消息

buf = self.sock.recv(50) 
timeout: timed out 

是很明顯的。

無論出於何種原因,您的連接都會超時。

中間的一些防火牆或網絡組件由於一段時間後處於非活動狀態而關閉了連接,或者遠程服務在合理的時間內沒有響應。

+0

您好RestRisiko,這不是因爲連接timout,我可以從運行腳本的筆記本電腦telnet到此設備。如果是因爲連接timout,它會在telnetlib.Telnet(host)命令中失敗,但是它在read_all命令中失敗。我希望你現在明白這一點。 – Amr 2011-04-03 09:42:18

0

我有同樣的問題。

更改「TNT.read_all()」 - >「TNT.read_some()」 和要重試的腳本的命令。

0

tn.read_very_eager()

對我很好。請記住,我們需要提供足夠的睡眠時間,這樣才能在讀取之前記錄下來