2013-08-29 110 views
1

我在python中創建了一個腳本,它使用telnetlib模塊遠程登錄到Linux設備,運行install.sh文件,然後在完成時重新啓動。在完成install.sh腳本之後,我添加了一條將回顯「安裝完成」發送給終端的行。不幸的是,read_until(「安裝完成」)和expect([「安裝完成」))沒有檢測到這個回聲。Telnetlib read_until()和expect()未檢測到終端回聲

tn = telnetlib.Telnet(ip) 
tn.read_until("login: ") 
tn.write(user + "\n") 
tn.read_until("Password: ") 
tn.write(password + "\n") 
tn.write("cd [file path to the install script]")#echoes "install complete" when finished 
tn.write("./install.sh\n") 
tn.read_until("install complete") #where the process hangs returns None if I add timeout parameter 

telnetlib沒有達到echo語句,還是應該使用另一個模塊或語言?如果我手動運行安裝程序,我可以按預期確認「安裝完成」回波。

+0

你確定「安裝完成」實際上是通過電線嗎?不知道telnet如何處理這種情況:字符串可能會在本地緩衝區中結束,等待換行符或刷新到stdout – user2722968

+0

我將debug_level設置爲10,並查看安裝命令的發送位置,並查看其輸出是在調試輸出中收到,但無論出於何種原因,「安裝完成」都不會出現在流中。有沒有辦法刷新緩衝區中存儲的內容? read_until()似乎讀取調用之前執行的命令。 – pwillig

+0

你確定它是「安裝完成\ n」並且在echo.in後面有一個換行符,因此命令實際上被執行了嗎? – user2722968

回答

0

所示的代碼在cd命令之後不包含換行符(「\ n」),因此發送的實際數據可能顯示爲「cd somepath./install.sh\n」,這不會發生工作...

此外,我會避免在這裏使用術語「回聲」,因爲與telnet「回聲」是真正的部分,你發送的字符發回給你(遠程回聲)。在這種情況下,無論是否發生,read_until()都不會在意。總之,這不是關於回聲。