как можно сканировать вывод команды любой программы / процесса, чтобы убедиться, что строка успеха / сбоя существует в консоли, используя python

#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 «данные обработаны успешно»