2014-12-31 5 views
3

텔넷을 통해 실행되는 명령이 콘솔을 통해 계속 응답 할 때 줄 단위로 텔넷 응답을 인쇄 할 수 있습니까?줄 단위로 텔넷 응답을 인쇄하는 방법은 무엇입니까?

예 : 로그를 수집하기 위해 명령을 실행했습니다. 콘솔 창에 로그를 계속 표시합니다. 한 줄을 놓치지 않고 응답 줄을 & 인쇄하여 읽을 수 있습니까?

아래의 코드 조각은 로그를 기록하지만 특정 시간 후에 만 ​​기록합니다. 그 사이에 서비스/스크립트 (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 실행을 읽기 위해 루프에서 tn.read_until("\n")을 사용할 수 있습니까? –

답변

2

당신은 telnet 명령

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

감사합니다. 그게 내가 원하는거야. –

0

당신은 당신의 스트림 바이트 별을 읽을 수있는 documentation에 지정된 ready_very_eager, read_eager, read_lazyready_very_lazy 기능을 사용할 수 있습니다. 그런 다음 자신의 코드에서 "until"로직을 처리 할 수 ​​있으며 동시에 읽기 라인을 콘솔에 씁니다.

+0

read_very_eager와 read_eager는 모두 ''와 함께 텔넷 응답을 출력하지만 필요하지 않습니다. 두 가지 모두 조리 된 데이터를 사용할 수없는 경우 ''를 인쇄합니다. read_lazy 및 read_very_lazy는 모두 ''만 인쇄합니다. –

관련 문제