Захватить сообщение «Ошибка сегментации» для сбойного подпроцесса: нет и нет ошибки после вызова метода 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)