Ошибка перехвата из subprocess.Popen () при сбое исполняемого файла - PullRequest
0 голосов
/ 19 марта 2019

Может ли кто-нибудь порекомендовать некоторые улучшения в следующем сценарии, чтобы в случае сбоя файла Application.exe сценарий завершался, а не зависал на неопределенный срок?

application = r'.\Application.exe'
input_params = '-i Input_1 -j Input_2

process = (application,input_params)
p = subprocess.Popen(" ".join(process),shell= True, stderr=subprocess.STDOUT, stdout = subprocess.PIPE)
p.communicate()

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


Редактировать: Реализован оператор p.returncode.

Чтобы пересмотреть мой оригинальный вопрос, при сбое программы Application.exe отображается следующее окно

enter image description here

Только после того, как я закрою это окно, программа продолжит работу (например, p.returncode вернет значение 255).

Есть ли способ, чтобы это окно не отображалось или автоматически закрывалось, или программа продолжала работать, несмотря на то, что это окно отображалось?

Привет

1 Ответ

1 голос
/ 19 марта 2019

Как перехватить вывод исключений из Python subprocess.check_output ()?

try:
    subprocess.check_output(...)
except subprocess.CalledProcessError as e:
    print e.output
from subprocess import Popen, PIPE

p = Popen(['bitcoin', 'sendtoaddress', ..], stdout=PIPE, stderr=PIPE)
output, error = p.communicate()
if p.returncode != 0: 
   print("bitcoin failed %d %s %s" % (p.returncode, output, error))
...