Как получить широковещательные сообщения через Paramiko - PullRequest
1 голос
/ 05 мая 2020

Я пытаюсь получить широковещательные сообщения через paramiko, чтобы убедиться, что действие полностью выполнено. Примерно так.

import paramiko
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(ip, 22, user, passwd, timeout=180)
command = 'sleep 3; wall "The system will shutdown in 3 seconds."; sudo nohup shutdown -h now;'
stdin, stdout, stderr = ssh.exec_command(command, timeout=300)
if "The system will shutdown in 3 seconds." in stdout.read().encode('utf-8'):
    print "Command success!!"
else
    print "Command failure!!"

Однако я всегда получал пустой вывод. Как я могу получить результат?

1 Ответ

1 голос
/ 05 мая 2020

Широковещательные сообщения отправляются только в интерактивные сеансы.

Таким образом, вам нужно, по крайней мере, установить параметр get_pty из SSHClient.exec_command на True.

Возможно, вам даже придется используйте канал оболочки через SSHClient.invoke_shell.


Хотя на самом деле я не понимаю, почему вы хотите захватить трансляцию. Что это «гарантирует»? Может быть, что-то вроде проверки кода выхода wall может быть более надежным подходом.

...