Paramiko с непрерывным стандартным выводом, где удаленный компьютер - Fort inet Fortigate firewall machine - PullRequest
0 голосов
/ 09 апреля 2020

Я пытаюсь запустить команду diag sys top-summary на удаленном форте inet, чтобы защитить компьютер с брандмауэром и перехватить его вывод через библиотеку Paramiko python. Для такой команды, как get system status , где вывод не является непрерывным, я получаю правильный вывод, но для тех команд, для которых вывод является непрерывным, я получаю стандартный вывод как

b'FG100D3G14809641 # Traceback (most recent call last):\r\n  File "top.py", line 1371, in <module>\r\n    main(int(opt.lines), int(opt.interval), opt.dump)\r\n  File "top.py", line 1269, in main\r\n    ch = _getch()\r\n  File "top.py", line 78, in _getch\r\n    return chr(Util.getch())\r\nValueError: chr() arg not in range(256)\r\n\r\nFG100D3G14809641 # '

Мой сценарий

import paramiko
# Also tried this function but no help
def line_buffered(f):
    line_buf = ""
    while not f.channel.exit_status_ready():
        line_buf += str(f.read(1))
        if line_buf.endswith('\n'):
            yield line_buf
            line_buf = ''
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
host = 'X.X.X.X'
port, user, password = 22, 'userName', 'Password'
ssh.connect(host, port,  user, password)

stdin,stdout,stderr = ssh.exec_command("diag sys top-summary",get_pty=True)
print(stdout.read())
ssh.close()

...