#python
#python
Вопрос:
В python как можно сканировать вывод команды любой программы / процесса, чтобы убедиться, что строка успеха / сбоя существует в консоли.
Ответ №1:
Обычно успех должен определяться по коду возврата процесса, а не по выводам, которые он генерирует. Но если вы настаиваете на просмотре вывода, тогда посмотрите stderr
аргумент различных функций в subprocess
.
Комментарии:
1. допустим, если я выполняю какую-либо программу Java и в конце выполнения мне нужно знать сообщение об успехе, например, «данные успешно обработаны», существует в консоли вывода.
2. Возможно, вам потребуется взглянуть на
stdout
. Но это зависит от того, как работает программа.
Ответ №2:
Более надежный способ сделать это — проверить код возврата процесса (как уже упоминалось), но вы могли бы сделать это таким образом:
import subprocess
proc = subprocess.Popen("/usr/bin/somejavaprogram -flag1 arg1".split())
stdout, stderr = proc.communicate()
if (proc.returncode = 0 and
"data successfully processed" in stdout):
print "Handle success here!"
else:
print "Job failed with return code %s"%(proc.returncode)
print stderr
Конечно, вышесказанное предполагает хорошо управляемый процесс, который записывает ошибки в stderr и имеет код возврата 0 при успешном запуске. YMMV.
Комментарии:
1. Спасибо, Майк. Это полезно. Я пытаюсь написать универсальную функцию на python, которая будет принимать 3 параметра (каталог, в котором должна выполняться команда (/ a / b / c, команда приложения (java или python) с набором параметров, сообщение об успешном завершении (например, данные обработаны правильно))
2. пример команды: /a / b / c java -jar blabla.jar —параметр 1 —параметр 2 «данные обработаны успешно»