Python 未在无缓冲模式下工作
Python is not working in unbuffered mode
我正在努力解决 python 的问题。我在 Red Hat Enterprise Linux Server release 7.1 (Maipo) 上使用 Python 2.7.13 和 Python 3.6.0。为了监视进程输出,我想使用 tail -f
来实时查看 STDOUT 和 STDERR。这里的关键字是无缓冲输出。互联网上的许多建议说使用 python -u ...
或环境变量 PYTHONUNBUFFERED,如 PYTHONUNBUFFERED=1 python ...
或 stdbuf -e0 -o0 python ...
。然而,以下测试脚本没有任何作用。
import sys
import time
while(True):
print("Test String")
time.sleep(1);
对于所有不同的命令,我总是有缓冲输出。即使我想使用 STDERR。它仍然是缓冲的,这让我很困惑,因为默认情况下 STDERR 应该是无缓冲的。使用 sys.stdout.flush()
或 sys.stderr.flush()
也没有完成这项工作。在 print()
中使用 flush=True
时,它按预期工作。
我正在寻找一种不需要编辑代码的解决方案,因为我无法编辑所有程序以获得无缓冲并立即刷新输出。我怎样才能做到这一点?
期待您的回答!
祝福!
您可以覆盖 Python 3 中的 print()
函数。这样您就不需要更改脚本中的每个 print()
函数。
import builtins
def print(*args):
builtins.print(*args, sep=' ', end='\n', file=None, flush=True)
print(
'hello', 'world',
'I have overrode print() function!',
1, # integer
[1, 2], # list
{1, 2}, # set
(1, 2), # tuple
{1: 2} # dict
)
将打印:
hello world I have overrode print() function! 1 [1, 2] {1, 2} (1, 2) {1: 2}
我正在努力解决 python 的问题。我在 Red Hat Enterprise Linux Server release 7.1 (Maipo) 上使用 Python 2.7.13 和 Python 3.6.0。为了监视进程输出,我想使用 tail -f
来实时查看 STDOUT 和 STDERR。这里的关键字是无缓冲输出。互联网上的许多建议说使用 python -u ...
或环境变量 PYTHONUNBUFFERED,如 PYTHONUNBUFFERED=1 python ...
或 stdbuf -e0 -o0 python ...
。然而,以下测试脚本没有任何作用。
import sys
import time
while(True):
print("Test String")
time.sleep(1);
对于所有不同的命令,我总是有缓冲输出。即使我想使用 STDERR。它仍然是缓冲的,这让我很困惑,因为默认情况下 STDERR 应该是无缓冲的。使用 sys.stdout.flush()
或 sys.stderr.flush()
也没有完成这项工作。在 print()
中使用 flush=True
时,它按预期工作。
我正在寻找一种不需要编辑代码的解决方案,因为我无法编辑所有程序以获得无缓冲并立即刷新输出。我怎样才能做到这一点?
期待您的回答!
祝福!
您可以覆盖 Python 3 中的 print()
函数。这样您就不需要更改脚本中的每个 print()
函数。
import builtins
def print(*args):
builtins.print(*args, sep=' ', end='\n', file=None, flush=True)
print(
'hello', 'world',
'I have overrode print() function!',
1, # integer
[1, 2], # list
{1, 2}, # set
(1, 2), # tuple
{1: 2} # dict
)
将打印:
hello world I have overrode print() function! 1 [1, 2] {1, 2} (1, 2) {1: 2}