当 运行 通过管道和 tee 命令时,python 打印语句未显示

a python print statement not shown when run through pipeline and tee command

我使用简单的函数 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..')

如何 运行s(好的):

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

exiting..

但是当我 运行 test.py | tee log 时,它不显示任何内容,如果我按下一个键,它就不会打印消息并等待键完成。实际上,问题是当通过 tee 命令 运行 时 print(str) 没有显示在屏幕上,它正在等待我的密钥。即使我使用 |tee 运行 时,如何使 print(str) 显示?

编辑:好的,我了解到 python -u 可以解决问题。但最初我的 python 脚本在脚本的开头有 #!/bin/env python,所以我 运行 它 test.py | tee log。我在网上搜索了一下,发现我可以做到:

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

使用-u取消缓冲,

python -u test.py | tee log