2016-10-27 12 views
0

Я пытаюсь перенаправить STDOUT и STDERR в файл журнала на малине pi. Мой .sh скрипт содержит следующую строкуПеренаправление stdout и stderr в файл, не работающий на raspbian

sudo ./main.py &> client.log & 

Скрипт работает правильно, так как он передает данные и от моего сервера, но client.log файл остается пустым. Я пробовал &>; &>>; >> с 2>&1; и |&. Ни один из них не записывает никаких данных в client.log.

sudo ./main.py 

stdout производит как и stderr выход. Что я делаю не так?

ответ

2

Синтаксис вы ищете:

sudo ./main.py > client.log 2>&1 & 
  • > client.log перенаправляет стандартный вывод в файл client.log
  • 2>&1 перенаправляет поток ошибок на стандартный вывод
  • & в конце линии работает это в фоновом режиме, чтобы вы могли продолжить работу в командной строке.

Примечание: если вы выйдете из системы во время работы команды фона, она будет убита. Вы можете переопределить это поведение, добавив nohup к началу строки. Для получения дополнительной информации Google bash jobs


Edited добавить дополнительную информацию после того, как комментарий ниже

пересмотренный синтаксис:

sudo stdbuf -o L -e L ./main.py > client.log 2>&1 & 
  • stdbuf изменяет буферизацию вывода в Linux по умолчанию
  • -o L Приливы стандартный вывод в конец каждой строки
  • -e L Приливы стандартный вывод в конце каждой строки
+0

Кажется, я ошибался ... Это решение, а также несколько других в моем исходном сообщении записывают данные в client.log, но они делают это от 15 минут до нескольких часов после того, как они были записаны в stdout/stderr main.py, и выход имеет тенденцию к обрезанию в произвольных положениях, то есть в середине линии ... – Mirac7

+0

Ага - это тоже разрешимо. См. Править выше. –

0

питон -u test.py> output.txt & Python буферизует свой вывод по умолчанию, и просто убивает сценарий не сразу вровень, что стандартный вывод на диск

 Смежные вопросы

  • Нет связанных вопросов^_^