2014-12-31 52 views
3

當通過telnet執行的命令持續響應控制檯時,是否可以逐行打印telnet響應?如何逐行打印telnet響應?

例如:我執行了一個命令(收集日誌),它一直在控制檯窗口上顯示日誌。我們是否可以按行&讀取響應行來打印它,而不會丟失任何單行?

下面的代碼段會寫入日誌,但只能在特定的指定時間之後。如果我停止服務/腳本(CTRL-C)之間,那什麼都不寫。

import sys 
import telnetlib 
import time 


orig_stdout = sys.stdout 
f = open('outpuy.txt', 'w') 
sys.stdout = f 

try: 
     tn = telnetlib.Telnet(IP) 
     tn.read_until(b"pattern1") 
     tn.write(username.encode('ascii') + b"\n") 
     tn.read_until(b"pattern2") 
     tn.write(command1.encode('ascii') + b"\n") 
     z = tn.read_until(b'abcd\b\n',600) 
     array = z.splitlines() 
except: 
     sys.exit("Telnet Failed to ", IP) 

for i in array: 
     i=i.strip() 
     print(i) 

sys.stdout = orig_stdout 
f.close() 
+0

你指揮輸出到f那麼你認爲如何可以將其輸出到屏幕上的一行durint執行? –

回答

2

你可以在一個循環中使用tn.read_until("\n")爲了讀你的telnet命令

while True: 
    line = tn.read_until("\n") # Read one line 
    print(line) 
    if 'abcd' in line: # last line, no more read 
     break 
+0

謝謝你Secator。這正是我想要的。 –

0

您可以使用在documentation指定的ready_very_eagerread_eagerread_lazy,並ready_very_lazy功能來讀取您的流逐字節。然後,您可以在自己的代碼上處理「until」邏輯,同時將讀取的行寫入控制檯。

+0

read_very_eager&read_eager同時打印telnet響應和'',這是不需要的。如果沒有可用的熟化數據,則兩個都打印''。 read_lazy&read_very_lazy都只打印''。 –