У меня есть программа, написанная в C++, и все, что она делает, делит 1/0, чтобы создать исключение.
Я запускаю.exe этой программы через библиотеку подпроцессов Python. Моя цель - захватить и зарегистрировать исключение, которое делает программа C++, в Python.
p = subprocess.Popen(['C:\\Users\\name\\Desktop\\Win32Project1.exe'])
Когда эта строка кода выполняет p, это ненулевое значение, означающее ошибку. Я запускаю окна 7 и используя Python 3.4.1
попробуй это
cmd = ['C:\\Users\\name\\Desktop\\Win32Project1.exe']
out, err = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE).communicate()
print out # this prints the output of the execution
print err # this prints if any error is returned
У меня нет окон, поэтому это не проверено, но может помочь вам, для получения дополнительной информации смотрите здесь
Вы также можете передать другие параметры в subprocess.Popen, которые указывают, где идут stdin и stderr.
Тогда вы можете сказать что-то вроде:
p = subprocess.Popen('C:\\Users\\name\\Desktop\\Win32Project1.exe', stdout=PIPE, stderr=PIPE)
(stdout_data, stderr_data) = p.communicate()
rc = p.returncode
# assume 0 return code means o.k.
if rc:
parse_error(stderr_data)
# end if
Я уверен, что вы не можете отслеживать исключения из другого процесса. Вы должны попробовать исключение в рамках программы C++ и передать ее одним из многих средств межпроцессного взаимодействия.
HTH, Cabbi
subprocess.Popen
возвращает объект Popen, который никогда не равен нулю. Вы можете вызватьp.wait()
и получить код возврата, если хотите.