оператор печати python не отображается при запуске через конвейер и команду tee

Я использую простую функцию w1(str), чтобы иногда останавливать программу и ждать ключа. Код ниже работает.

файл: test.py

#!/bin/env python

def w1(str):
    print (str)
    wait = raw_input()
    return

if __name__ == '__main__':
    print('started..')
    w1('press a key')
    print('exiting..')

Как это работает (хорошо):

ckim@stph45:~/test] test.py
started..
press a key

exiting..

Но когда я запускаю test.py | tee log, он ничего не показывает, и если я нажимаю клавишу, он завершает печать сообщения и ждет ключа. На самом деле, проблема в том, что print(str) не отображается на экране при запуске команды tee, и она ждала моего ключа. Как я могу сделать так, чтобы этот print(str) отображался, даже когда я запускаю его с |tee?

РЕДАКТИРОВАТЬ: хорошо, я узнал, что python -u делает свое дело. Но изначально мой скрипт Python имеет #!/bin/env python в начале скрипта, поэтому я запускаю его test.py | tee log. Я искал в сети и обнаружил, что могу сделать:

ckim@stph45:~/test] setenv PYTHONUNBUFFERD 1
ckim@stph45:~/test] $test.py | tee log

person Chan Kim    schedule 13.08.2016    source источник


Ответы (1)


Используйте -u для разбуферизации,

python -u test.py | tee log
person Marlon Abeykoon    schedule 13.08.2016