50

我在一些 python 代码中注意到 -u 用于启动 python 解释器。我查看了 python 的手册页,但我无法从中得到太多。请给我一些例子。

4

3 回答 3

61

来自python --help

-u     : unbuffered binary stdout and stderr; also PYTHONUNBUFFERED=x
         see man page for details on internal buffering relating to '-u'

手册页指出:

-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.readline()" inside a "while 1:" loop.

Python 以缓冲模式打开 stdin、-out 和 -error 流;它将读取或写入更大的块,将数据保存在内存中,直到达到阈值。-u禁用这些缓冲区。

此外,python 可以解释打开文件上的换行符,并将它们与本机平台换行符(文本模式)相互转换。该-u选项禁用此转换,允许您处理二进制数据而不必担心\r\n组合可能会发生什么。相当于使用函数打开文件时使用rbor模式。wbopen()

于 2013-01-10T12:59:12.067 回答
21

Python 针对读取和打印大量数据进行了优化。其中一项优化是缓冲Python 解释器的标准输入和输出。这意味着每当程序尝试使用其中一个流时,解释器会将使用阻塞成大块,然后一次性发送所有块。这比单独发送每个单独的读/写要快,但显然具有数据可能在中间“阻塞”的缺点。

-u 标志关闭此行为。

于 2013-01-10T13:02:26.197 回答
0

我也有这个问题,发现这样做:

sudo systemctl enable myservice.service

修复了这个问题 - 我已经检查了这个线程中列出的所有其他内容。只需要这样做一次,服务就会在每次后续启动时启动。我的也是一个python脚本

于 2021-11-29T18:39:59.660 回答