Подпроцесс Python - получить статус выхода команды на другой компьютер, используя rsh - PullRequest
0 голосов
/ 25 сентября 2018

Я пытаюсь выполнить некоторые команды на некотором компьютере, к которому я подключаюсь с помощью команды rsh (для моего случая не могу использовать ssh).

Через subprocess.check_call, япри выполнении команды и ожидаю, что check_call завершит работу с исключением, когда состояние завершения моей команды "cd /libs/" указывает на ошибку.

Ниже приведен код, который я пробую.

with open('logs.txt','w') as outstream:
    subprocess.check_call("rsh bldr 'cd /libs/' ", shell=True,stdout=outstream)

Но здесь rsh возвращает только свой статус выхода, а не команду, которую он выполняет.

Из-за чего даже в случае сбоя команды нет ошибки в функции check_call, поскольку она получает rsh статус выходакоторый всегда будет 0.

Итак, как получить статус выхода команды здесь?

Кроме того, как я могу сделать check_call неудачным на основании статуса выхода моей команды?

Примечание: я пытаюсь изменить каталог на / libs, который не существует.Я надеюсь, что check_call потерпит неудачу и остановит выполнение скрипта.

1 Ответ

0 голосов
/ 25 сентября 2018

Capture stderr, который также можно использовать для проверки, не выполнилась ли команда на удаленном компьютере.

with open('logs.txt','w') as outstream:
    with open('error.txt','w') as errstream:
        ret = subprocess.check_call("rsh centos lsh", shell=True, stderr=errstream, stdout=outstream)

fpstat = os.stat('error.txt')
if fpstat.st_size > 0:
    print("problem in command on remote machine.")
else:
    print("Successful.")
...