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

У меня проблемы с использованием модуля подпроцесса для получения выходных данных аварийных программ. Я использую python2.7 и подпроцесс для вызова программы со странными аргументами, чтобы получить некоторые ошибки. Для вызова программы я использую следующий код:

proc = (subprocess.Popen(called,
                         stdout=subprocess.PIPE,
                         stderr=subprocess.PIPE))
out,err=proc.communicate()
print out,err

call - это список, содержащий имя программы и аргумент (строка, содержащая случайные байты, кроме байта NULL, который подпроцессу вообще не нравится)

Код ведет себя и показывает мне stdout и stderr, когда программа не падает, но когда происходит сбой, out и err пусты, вместо того, чтобы показывать знаменитую «Ошибка сегментации».

Я хотел бы найти способ получить и ошибаться даже при сбое программы.

Надеюсь, кто-то здесь, как идея :)

PS: я также попробовал методы check_output / call / check_call

РЕДАКТИРОВАТЬ:

Я запускаю этот скрипт на 64-битной версии Archlinux в виртуальной среде Python (здесь не должно быть ничего важного, но вы никогда не знаете: p)

Segfault происходит в программе C, которую я пытаюсь запустить, и является следствием переполнения буфера

Проблема в том, что когда происходит ошибка, я не могу получить вывод того, что произошло с подпроцессом

Я правильно понял код возврата: -11 (SIGSEGV)

Используя Python я получаю:

 ./dumb2 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 
 ('Exit code was:', -11) 
 ('Output was:', '') 
 ('Errors were:', '')

В то время как вне питона я получаю:

./dumb2 $(perl -e "print 'A'x50")  
BEGINNING OF PROGRAM 
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
END OF THE PROGRAM
Segmentation fault (core dumped)

Возвращаемое значение оболочки такое же: echo $? возвращает 139, поэтому -11 ($? & 128)

Ответы на вопрос(3)

Ваш ответ на вопрос