Я сталкиваюсь с довольно странной проблемой прекомпилятора Oracle Pro * C в linux: в рамках нашего процесса сборки мы вызываем утилиту proc для генерации файлов .cxx, которые впоследствии компилируются как исходные файлы C ++.Эта утилита proc вызывается через скрипт python, который захватывает как stdout, так и stderr и печатает их оба в случае кода возврата, отличного от 0.Всякий раз, когда прекомпилятор сталкивается с ошибкой компиляции, он сообщает о них в стандартном выводе, который правильно распечатывается и возвращает код возврата, отличный от 0.
Однако в нашей среде CI прекомпилятор систематически завершает работу, возвращая отрицательный код возврата, сничего не выводится ни на стандартный вывод, ни на стандартную ошибку.
Моя конечная цель - понять этот сбой и исправить его, но я не могу воспроизвести этот конкретный сбой за пределами среды CI.Однако мне удалось создать другой сбой утилиты proc на виртуальной машине Linux, передав ложные папки include в качестве аргументов.И я являюсь свидетелем странного поведения в моем bash-терминале, которое объясняет, хотя я вообще не получаю вывод из своего скрипта на python.При непосредственном вызове proc в моем терминале правильно выводится сообщение об ошибке:
$> /path/to/proc option_1=foo option2=bar
Pro*C/C++: Release 12.1.0.2.0 - Production on Tue Dec 4 08:13:31 2018
Copyright (c) 1982, 2014, Oracle and/or its affiliates. All rights reserved.
System default option values taken from: /usr/lib/oracle/12.1/client64/lib/precomp/admin/pcscfg.cfg
Error at line 3, column 10 in file /usr/include/c++/8/x86_64-redhat-linux/bits/c++config.h
#include <bits/wordsize.h>
.........1
PCC-S-02015, unable to open include file
Error at line 39, column 10 in file /usr/include/c++/8/x86_64-redhat-linux/bits/os_defines.h
#include <features.h>
.........1
PCC-S-02015, unable to open include file
Syntax error at line 44, column 21, file /usr/include/c++/8/x86_64-redhat-linux/bits/os_defines.h:
Error at line 44, column 21 in file /usr/include/c++/8/x86_64-redhat-linux/bits/os_defines.h
#if __GLIBC_PREREQ(2,15) && defined(_GNU_SOURCE)
....................1
PCC-S-02201, Encountered the symbol "," when expecting one of the following:
)
Syntax error at line -1741187720, column 0, file p�:
INTERNAL ERROR: Failed assertion [PGE Code=90105]
Segmentation fault (core dumped)
$>
При перенаправлении стандартного вывода в файл сообщение об ошибке не выводится, кроме последней строки, касающейся генерируемого ядра.,Однако файл, содержащий перенаправленный вывод, пуст:
$> /path/to/proc option_1=foo option2=bar > test.txt
Segmentation fault (core dumped)
$> more test.txt
$> ls -al test.txt
-rw-r--r-- 1 me staff 0 3 déc 20:27 test.txt
$>
Кроме того, вывод трубопровода в cat
не приводит к печати вообще:
$> /path/to/proc option_1=foo option2=bar | cat
$>
На основании этого Iесть 2 вопроса:
- как возможно, что вывод не попадает в файл при перенаправлении?
- как еще я могу попытаться захватить его?