Вывод системного журнала, отправленного на стандартный вывод, grepped, становится усеченным в средней строке - PullRequest
5 голосов
/ 13 июня 2011

Итак, я записываю некоторую отладочную информацию, отправляю ее на стандартный вывод, после чего я записываю ее в строку. В определенный момент ведение журнала завершено, и приложение ожидает чего-то, но вывод grep усекается в средней строке. Таким образом, он соответствовал строке, но не выводил всю эту строку.

Есть ли способ заставить grep сбрасываться?

Спасибо.

UPDATE: Похоже, что --line-buffered поможет.

1 Ответ

3 голосов
/ 15 июля 2011

Я думаю, что вы решили свою проблему с помощью grep, используя флаг --line-buffered. Также убедитесь, что ваше приложение очищает ваш стандартный вывод после каждой строки. Если ваш стандартный вывод является терминалом, по умолчанию используется буферизация строки, но при передаче его в другую программу по умолчанию используется полная буферизация.

Если вы отправляете данные в программу, у которой нет флага --line-buffered (например, uniq), взгляните на программу stdbuf (http://www.pixelbeat.org/programming/stdio_buffering/stdbuf-man.html), которая позволяет вам изменять параметры буферизации любая программа.

См. http://www.pixelbeat.org/programming/stdio_buffering/ для хорошего обзора проблемы и некоторых распространенных решений.

...