Paramiko SSH exec_command (скрипт оболочки) возвращается до завершения

Я запускаю сценарий оболочки с удаленной машины Linux с помощью Paramiko. Сценарий оболочки запускается и выполняет команду make -j8. Однако exec_command возвращается до завершения make.

Если я запускаю скрипт на локальной машине, он выполняется правильно.

Может ли кто-нибудь объяснить мне такое поведение?


person Larry    schedule 09.07.2010    source источник


Ответы (1)


Вам нужно дождаться завершения приложения, exec_command не является блокирующим вызовом.

print now(), "before call"
stdin, stdout, sterr = ssh.exec_command("sleep(10)")
print now(), "after call"
channel = stdout.channel
print now(), "before status"
status = channel.recv_exit_status()
print now(), "after status"
person deft_code    schedule 09.07.2010
comment
как ни странно, использование stdout.channel.recv_exit_status() блокирует мой код навсегда - person sliders_alpha; 04.03.2016
comment
@sliders_alpha Действительно, хотя этот ответ в принципе правильный, эта простая реализация будет зависать / заходить в тупик, если вывод команды достаточно велик. См. Paramiko ssh die/hang с большим выходом. - person Martin Prikryl; 06.04.2021