channel.recv_exit_status в paramiko всегда возвращает код возврата первой команды, выполненной над invoke_shell - PullRequest
1 голос
/ 19 ноября 2011

Я получаю некоторые расхождения в коде возврата ниже. Может быть, я не использую должным образом. Каждый раз, когда я печатаю код возврата, он печатает так же, как первый возвращенный. Нужно ли сбрасывать код возврата. Я имею в виду в следующем примере, я получаю код возврата как 2 для обеих команд. Теперь, когда я обмениваю обе команды, я имею в виду заменить ls -al;exit\n на ls -al file_not_exist;exit\n и наоборот, он печатает код возврата 0. Каждый раз, когда он печатает тот же код возврата, что и первая, возвращенная.

ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) 
ssh.connect('localhost', username='sam', password='mypassword')

channel = ssh.invoke_shell()
channel.send('ls -al file_not_exist;exit\n') #Sending to list a file which doesn't exist
time.sleep(3)
print "My 1st command exit status is: ",channel.exit_status_ready()
print "My 1st command return code is: ", channel.recv_exit_status()

channel.send('ls -al;exit\n')
time.sleep(3)
print "My 2nd command exit status is: ",channel.exit_status_ready()
print "My 2nd command return code is: ",channel.recv_exit_status()

Мне нужно напечатать код возврата каждой команды. Не могли бы вы помочь мне решить эту проблему?

1 Ответ

2 голосов
/ 29 ноября 2011

Состояние выхода, отправляемое через ssh, соответствует состоянию удаленной команды, выполняемой процессом ssh. Вы получаете только один статус выхода, а в случае invoke_shell() это статус выхода самой оболочки. Статус завершения команд, запускаемых в этой оболочке, известен только в этой среде.

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

Смотрите также: Можно ли получить код завершения команды, выполняемой в подоболочке через ssh?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...