@Bear-ivan

Из SSH не декодируется из байт в ASCCII?

Добрый день.
Получаю из SSH байты пример ниже:
b"rxmop:moty=rxotg;\x1b[61C\r\nRADIO X-CEIVER ADMINISTRATION\x1b[50C\r\nMANAGED OBJECT DATA\x1b[60C\r\n\x1b[79C\r\nMO\x1b[9;19HRSITE\x1b[9;55HCOMB FHOP MODEL\x1b[8C\r\nRXOTG-58\x1b[10;19H54045_1800\x1b[10;55HHYB BB G12\x1b[10C\r\n\x1b[79C\r\n\x1b[12;19HSWVERREPL\t SWVERDLD\tSWVERACT\x1b[6CTMODE\x1b[12C\r\n\x1b[13;19HB1314R081D\x1b[13;63HTDM\x1b[14C\r\n\x1b[79C\r\n\x1b[15;19HCONFMD CONFACT TRACO ABISALLOC CLUSTERID SCGR\x1b[11C\r\n\x1b[16;19HNODEL 4\t POOL FLEXIBLE\x1b[29C\r\n\x1b[79C\r\n\x1b[18;19HDAMRCR CLTGINST CCCHCMD SWVERCHG\x1b[26C\r\n\x1b[19;37HNORMAL UNLOCKED\x1b[26C\r\n\x1b[79C\r\n\x1b[21;19HPTA JBSDL PAL JBPTA\x1b[39C\r\n\x1b[79C\r\n\x1b[79C\r\n\x1b[24;19HTGFID\x1b[24;33HSIGDEL\x1b[24;47HBSSWANTED PACKALG\x1b[13C\r\n\x1b[24;19HH'0001-19B3 NORMAL\x1b[41C\r\n\x1b[79C\r\nMO\x1b[24;19HRSITE\x1b[24;55HCOMB FHOP MODEL\x1b[8C\r\n"
далее обрабатываю ssh.recv(99999).decode('ascii')
но не декодируется часть символов например:
\x1b[61C
\x1b[50C
\x1b[9;55H
\x1b[9;19H
в статье ниже объясняется что это ANSI escape codes, которые появляются так как я использую invoke_shell. ранее все работало пока не переехали на другой сервер.
https://stackoverflow.com/questions/33291631/is-th...
при записи в файл получаю тоже крокозябры:
rxmop:moty=rxotg;[61C
RADIO X-CEIVER ADMINISTRATION[50C
MANAGED OBJECT DATA[60C
[79C
MO[9;19HRSITE[9;55HCOMB FHOP MODEL[8C
RXOTG-58[10;19H54045_1800[10;55HHYB

если использовать putty все четко и красиво.
уйти от invoke_shell не могу тк соединение прокидывается с однойго сервера на другой.
пример кода ниже:
# coding:ascii
import paramiko
port = 22
data = ""
client = paramiko.SSHClient()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
client.connect(hostname=host, username=user, password=secret, port=port, timeout=10)
ssh = client.invoke_shell()
ssh.send("rxmop:moty=rxotg;\n")
while data.find("<") == -1:
time.sleep(0.1)
data += ssh.recv(99999).decode('ascii')
ssh.close()
client.close()
f = open('text.txt', 'w')
f.write(str)
f.close()

Нормальный вывод ниже:

MO RSITE COMB FHOP MODEL
RXOTG-58 54045_1800 HYB BB G12

SWVERREPL SWVERDLD SWVERACT TMODE
B1314R081D TDM

CONFMD CONFACT TRACO ABISALLOC CLUSTERID SCGR
NODEL 4 POOL FLEXIBLE

DAMRCR CLTGINST CCCHCMD SWVERCHG
NORMAL UNLOCKED

PTA JBSDL PAL JBPTA

TGFID SIGDEL BSSWANTED PACKALG
H'0001-19B3 NORMAL

что можете порекомендовать чтоб вернуть нормальный вывод, чтоб обрабатывались все символы?
регулярные выражения не помогают, так как сдвигается структура записи, далее в коде выбираются символы с определенных позиций.
  • Вопрос задан
  • 152 просмотра
Пригласить эксперта
Ответы на вопрос 1
saboteur_kiev
@saboteur_kiev Куратор тега Python
software engineer
Обработка этих последовательностей - задача клиента, который либо выводит их как есть, если не умеет, либо обрабатывает как управляющие символы

Какие терминалы поддерживает этот invoke_shell? Можете проверить, поддерживает ли он xterm, например?
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы