Я запускаю исполняемый файл C из Python, и этот исполняемый файл иногда является segfaults. Когда он отключается, модуль subprocess не возвращает ничего в stdout или stderr.Модуль подпроцесса Python не возвращает stdout на segfault
Пример кода:
import subprocess
proc = subprocess.Popen(['./a.out'], stdin=subprocess.PIPE,
stdout=subprocess.PIPE, stderr=subprocess.PIPE)
out, err = proc.communicate()
print 'out: "%s"' % out
print 'err: "%s"' % err
print proc.returncode
Источником a.out
является:
int main() {
printf("hello world\n");
int x = 1/0;
}
Выход ./a.out
является:
hello world
Floating point exception
Вывод кода Python является (в Linux , python 2.7):
out: ""
err: ""
-8
Есть ли способ получить выход исполняемого файла, даже если он сработает?
Общий метод перевода кода возврата в строковое сообщение также будет приятным.
Хорошее решение, если вы управляете кодом C и можете добавить в него вызов 'setvbuf' и перекомпилировать. Я принимал сторонний C-код, о котором невозможно изменить. – Celada
Ну, если ваш сторонний код не стирает его stdout до того, как он сработает, вы не сможете многое сделать. – vy32