Обработка исключений подпроцесса Python

0

У меня есть программа, написанная в C++, и все, что она делает, делит 1/0, чтобы создать исключение.

Я запускаю.exe этой программы через библиотеку подпроцессов Python. Моя цель - захватить и зарегистрировать исключение, которое делает программа C++, в Python.

p = subprocess.Popen(['C:\\Users\\name\\Desktop\\Win32Project1.exe'])

Когда эта строка кода выполняет p, это ненулевое значение, означающее ошибку. Я запускаю окна 7 и используя Python 3.4.1

  • 0
    В зависимости от того, какой контроль вам нужен, вам нужно обработать stdout и stderr pipe + wait () для возвращаемого значения. Может быть, check_output делает работу за вас?
  • 1
    Когда эта строка кода выполняет p, это ненулевое значение, означающее, что произошла ошибка - нет, это не то, что происходит. subprocess.Popen возвращает объект Popen, который никогда не равен нулю. Вы можете вызвать p.wait() и получить код возврата, если хотите.
Теги:
exception
subprocess
visual-studio-2012

3 ответа

0

попробуй это

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

У меня нет окон, поэтому это не проверено, но может помочь вам, для получения дополнительной информации смотрите здесь

0

Вы также можете передать другие параметры в 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
0

Я уверен, что вы не можете отслеживать исключения из другого процесса. Вы должны попробовать исключение в рамках программы C++ и передать ее одним из многих средств межпроцессного взаимодействия.

HTH, Cabbi

  • 0
    Когда я запускаю процесс с помощью windbg, он отслеживает исключение и регистрирует ошибку, поэтому это должно быть возможно, да? Пройдя через код C ++ и изменив его, в моем случае это не вариант.
  • 0
    Вы можете использовать python для взаимодействия с средствами отладки платформы. Я искал отладочные вызовы Windows от Python и получил несколько интересных ответов, таких как winappdbg . Но, если быть честным по отношению к @cabbi, вы, похоже, ослепили его здесь, не упомянув, что пытаетесь написать отладчик. Для большинства пользователей вы не пытаетесь получить исключение из других программ.
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню