Выскочка и isstty (STDOUT_FILENO)

Много использования программ Linux istty определить, является ли STDOUT терминалом или нет. Например, ls (по умолчанию) подавит окрашенный вывод, если он перенаправил (istty == 0).

Когда рабочие новомодные задания, STDOUT, кажется, не перенаправляется. Процесс думает, что пишет в /dev/pts/0.

Мое приложение использует этот тот же дедуктивный подход и при выскочке, выходные управляющие символы терминала, которые заканчиваются в файлах журнала в /var/log/upstart/myapp.log.

Я могу или настроить новомодное задание или изменить мой (C++) источник приложения для устранения этой проблемы?

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

0
задан 29 January 2015 в 14:33

1 ответ

Наличие Вашей программы ведет себя по-другому в зависимости от того, с чем это подключено, осужден. Например, в Стандартах Кодирования GNU говорится :

Аналогично, don’t заставляют поведение программы командной строки зависеть от типа устройства вывода, которое это получает как стандартный вывод или стандартный вход. Независимость от устройств является важным принципом дизайна system’s; не ставьте под угрозу его просто для сохранения кого-то от ввода опции время от времени. (Изменение в синтаксисе сообщения об ошибке при использовании терминала в порядке, потому что это - второстепенный вопрос, от которого не зависят люди.)

Вместо этого полагайте, что добавляющие параметры командной строки к Вашей программе изменяют поведение, и использующий их в Вашем новомодном задании.

0
ответ дан 3 August 2019 в 17:42

Другие вопросы по тегам:

Похожие вопросы: