2
Python의 telnetlib 모듈을 사용하여 장치와 통신하려고합니다. 연결을 설정하고 내 쿼리를 장치에 전달할 수있는 것 같지만 출력은 예상 한 것과 다릅니다. 여기 파이썬의 텔넷 쿼리에서 여러 줄을 읽으려면 어떻게해야합니까?
내 단순화 코드 :import telnetlib
import time
HOST = "10.10.10.71"
tn = telnetlib.Telnet(HOST, port=55555, timeout=60)
time.sleep(5) # Give the processor time to connect
tn.write(b'v' + b'\r\n') # Get the processor version, using 'v'
print(tn.read_eager().decode('utf-8'))
tn.close() # Close the connection
이 코드를 실행 한 후, 모든 단말 디스플레이는 : MPA :? - 내가 예상했던 프로세서 정보가 아닙니다.
텔넷 클라이언트를 사용하면 연결을 설정 한 후 mpa :?가 나타납니다. 프롬프트에서 장치가 내 명령에 대한 준비가되었음을 나타냅니다. 나는 그 때이 형식으로 출력을 생성해야하는 'V'를 입력 : 질의 후
mpa:? v
FIRMWARE CONFIGURATION:
Processor Firmware Type
Build Number
Copyright Info
HARDWARE CONFIGURATION:
Line 1 - xxxx
Line 2 - xxxx
Line 3 - xxxx
...
mpa:?
의 MPA를 :? 프롬프트가 표시되면 다음 명령을 준비하십시오.
는print(tn.read_eager().decode('utf-8'))
대신에, 나는 또한
print(tn.read_all().decode('utf-8'))
을 시도했지만 한 다음과 같은 오류 메시지가 출력이 시간 :
Traceback (most recent call last):
File "C:/Python/Telnet_logger_1.py", line 14, in <module>
print(tn.read_all().decode('utf-8'))
File "C:\Python34\lib\telnetlib.py", line 335, in read_all
self.fill_rawq()
File "C:\Python34\lib\telnetlib.py", line 526, in fill_rawq
buf = self.sock.recv(50)
socket.timeout: timed out
사람이 올바른 방향으로 날 지점, 또는 알려 수 있을까 내가 내가 잘못 했니?
많은 감사합니다.
나는 새로운 라인과 캐리지 리턴 후 각 라인을 인쇄하는 동안 루프를 추가하여 문제를 해결 한
:?' 명령을 보내기 전에 장치가 반환 한 프롬프트 [docs] (https://docs.python.org/3/library/telnetlib.html)에있는 예제와 비슷한'tn.read_until (b "mpa :?")'과 같은 것을 시도해 보셨습니까? –
@ PM2Ring - 귀하의 제안에 감사드립니다. 나는'time.sleep (5)'을 제거하려고 시도하고 그것을'tn.read_until (b "mpa :?")'로 바꿨다. - 나는 tn.read_all()을 사용할 때 여전히 타임 아웃 에러를 얻는다. tn.read_eager(), 전혀 출력이 없습니다. – skyhammer
나는 무엇을 제안해야할지 모르겠다. telnetlib에 대한 경험이 제한되어 있지만 Python 2.6에서 성공적으로 사용하여 ADSL 모뎀과 통신했습니다. 모뎀은 항상 명령 프롬프트로 출력을 종료하기 때문에'tn.read_until (프롬프트)'를 사용하여 데이터를 읽습니다. –