Python向缓冲区而不是文件写入数据

问题描述 投票:0回答:1

我是一个Python新手,但我遇到了一个奇怪的行为,我无法解释。基本上,我需要将python脚本输出转发到一个文件。

举个例子,我需要将python脚本的输出转发到一个文件中。

while True:
  print('tick')
  time.sleep(5)

然后将输出转发到文件中

python test.py >> test.log 2>&1

但问题是,在脚本完成之前,文件是空的,看起来它把输出写到某个缓冲区,最后才把这个缓冲区发送到文件中。

这对我来说是完全不能接受的,因为我有一个正在运行247的脚本,在这种情况下,我将永远不会得到适当的日志。我需要实时写入文件。

我知道可以用

with open('test.log', mode='a') as log_file:

但在这种情况下,我将失去在终端中查看结果的能力。此外,我将被严格限制在一个脚本中指定的文件中。

我想这实际上不是Python的问题,而是更通用的问题。不过,是否可以像在终端中看到的那样,对一个文件进行即时写入?

python python-3.x file output stdout
1个回答
1
投票

看起来它把输出写到了某个缓冲区里。

这是正确的。你可以用 flush=True,所以。

while True:
  print('tick', flush=True)
  time.sleep(5)

0
投票

试试这个

with open('log.log', 'w+') as log_file:    
print('tick', file=log_file)

这样一来,打印输出就会进入文件,而不是stdout。

© www.soinside.com 2019 - 2024. All rights reserved.