Как отловить ошибку процесса вызова в вызове Python с подпроцессом - PullRequest
0 голосов
/ 22 февраля 2019

Пытаясь отладить программу (с переполнением буфера) с помощью скрипта на python, мне нужно восстановить все сообщения, которые может отправлять программа.

В Linux на терминале обычный вызов как . / A.out AAA ответить

Ваш аргумент: AAA

с входом переполнения: . / a.out AAAAAAA ответить

Ваш аргумент: AAAAAAA

Ошибка сегментации

Я строю код Python следующим образом

import sys, string, os
from subprocess import Popen, PIPE

processName = os.getcwd() + "/a.out"
argument = "AAAAAAAAA"

p = Popen([processName, argument], stdout=PIPE, stderr=PIPE)
output, error = p.communicate()
print(":: %d %s %s" % (p.returncode, output, error))

, но яне удалось получить сообщение Сегментация , сообщение

, так как не найден необходимый параметр, насколько я ищу

1 Ответ

0 голосов
/ 23 февраля 2019

Процесс на самом деле не печатает Segmentation fault.Когда вы запускаете a.out из оболочки, это фактически производится самой оболочкой.Таким образом, это не сообщение, созданное вашей программой.

См. Что на самом деле печатает «Ошибка сегментации»?

Но вы можете проверить код возврата вашего процессачтобы узнать, остановился ли он из-за ошибки сегментации, сравнив p.returncode с -signal.SIGSEGV из модуля signal, см. подробности в вопросе, связанном с ниже.

Этот вопрос является возможной копией Захватить сообщение «Ошибка сегментации» для аварийного подпроцесса: нет выхода и ошибки после вызова для связи ()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...