Linux tee 不能使用 python?

我做了一个 Python 脚本,它使用一个无限循环与 Web 服务器通信。 我想记录每一个通信数据到一个文件,并从终端监测他们在同一时间。所以我像这样使用 tee 命令。

python client.py | tee logfile

但是,我没有从终端或日志文件。 Python 脚本工作正常。 这是怎么回事? 我错过了什么吗?

希望你能给点建议。 先谢谢你。

32700 次浏览

来自 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

不要让它完全没有缓冲,你可以让它线性缓冲,因为它是正常的与 sys.stdout.reconfigure(line_buffering=True)(后 import sys当然)。

这是在3.7中添加的,文档: https://docs.python.org/3/library/io.html#io.TextIOWrapper.reconfigure