#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:
Вы можете использовать функцию getstatusoutput из того же пакета. Он возвращает кортеж с кодом выхода и сообщением. Если код выхода равен 0, это считается успешным завершением. Другие коды указывают на неправильное завершение.
Ответ №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
после ее возврата вы вернетесь в исходный каталог.