2014-02-09 3 views
53

Я создал скрипт python, который связывается с веб-сервером с использованием бесконечного цикла. Я хочу регистрировать все данные связи в файл, а также контролировать их с терминала в одно и то же время. поэтому я использовал команду tee следующим образом.linux tee не работает с python?

python client.py | tee logfile 

Однако я ничего не получил от терминала или журнала. скрипт python работает нормально. Что здесь происходит? Я что-то упустил?

какой-либо совет будет оценен. благодарим вас заранее.

+1

Буферизация ведет себя по-разному для труб и терминалов. Вам может потребоваться выполнить явное 'sys.stdout.flush()' из вашего скрипта всякий раз, когда вы регистрируете строку. –

+11

Это буферизация! Скажем 'python -u client.py | tee logfile' вместо этого. – devnull

+0

Для других способов запуска небуферизованного вывода см. Http://stackoverflow.com/q/107705/1328439 –

ответ

102

От man python:

-u  Force stdin, stdout and stderr to be totally unbuffered. On systems 
      where it matters, also put stdin, stdout and stderr in binary mode. Note 
      that there is internal buffering in xreadlines(), readlines() and file- 
      object iterators ("for line in sys.stdin") which is not influenced by 
      this option. To work around this, you will want to use "sys.stdin.read‐ 
      line()" inside a "while 1:" loop. 

Так что вы можете сделать, это:

/usr/bin/python -u client.py >> logfile 2>&1 

Или с помощью tee:

python -u client.py | tee logfile 
+0

работает как шарм. Спасибо! – daehee

+6

спасибо, что я добавляю это вверху: #!/Usr/bin/python -u – Superbiji

+0

Вау, живем и учимся ... – oneloop

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