Как я могу проверить, была ли команда успешной или нет?

#python #subprocess

#python #подпроцесс

Вопрос:

Итак, я пытаюсь проверить, была ли команда успешной или нет при выполнении команды подпроцесса.

Я действительно плохо объясняю, но просто посмотрите на мой пример:

Вот мой код

 output = subprocess.getoutput("sdf")
print(output)
 

Я хочу проверить, является ли результат:

 'sdf' is not recognized as an internal or external command,
operable program or batch file.
 

Я попробовал этот код:

 error_temp = fr"'sdf' is not recognized as an internal or external command, operable program or batch file."
if output == error_temp:
   print("'sdf' was not recognized by this system, please register this command and try again later.")
else:
   print(output)
 

Но на самом деле это не работает, я думаю, это связано с пропущенной строкой в выводе…

Любая помощь приветствуется, спасибо.

Редактировать:

Я исправил эту проблему благодаря @Cristian

Вот мой обновленный код:

 status = subprocess.getstatusoutput("sdf")
print(status[0])
 

Ответ №1:

Ответ №2:

Я просто хочу показать альтернативу getstatusoutput более старому методу, который всегда запускает оболочку для выполнения вашей программы, что может быть неэффективным, если вам не нужны средства, предоставляемые оболочкой (например, расширение с помощью подстановочных знаков).

Следующие виды использования subprocess.run (которые также могут использовать оболочку для выполнения вашей программы, если вы укажете shell=True ). Первый пример не фиксирует выходные данные выполняемой программы, а второй пример фиксирует. Запускаемая программа представляет собой небольшую программу на Python, test.py , выполняемую с помощью команды python test.py

test.py

 print('It works.n')
 

Пример 1 — Не захватывать выходные данные

 import subprocess


completed_process = subprocess.run(['python', 'test.py'])
print(completed_process.returncode)
 

С принтами:

 It works.
0
 

Пример 2 — Захват выходных данных

 import subprocess


completed_process = subprocess.run(['python', 'test.py'], capture_output=True, text=True)
print(completed_process.returncode)
print(completed_process.stdout)
 

С принтами:

 0
It works.
 

Комментарии:

1. Спасибо! Я мог бы подумать о переходе на этот метод! Я обнаружил, что subprocess.getoutput это не работает с cd командой, поэтому мне просто интересно subprocess.run , работает ли?

2. Для этого вы должны использовать os.chdir функцию, потому что даже subprocess.run после ее возврата вы вернетесь в исходный каталог.