Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python写入缓冲区而不是文件_Python_Python 3.x_File_Output_Stdout - Fatal编程技术网

Python写入缓冲区而不是文件

Python写入缓冲区而不是文件,python,python-3.x,file,output,stdout,Python,Python 3.x,File,Output,Stdout,我对Python还很陌生,但我遇到了一个我无法解释/解决的奇怪行为。 基本上,我需要将python脚本输出转发到一个文件 例如: while True: print('tick') time.sleep(5) 然后将输出重定向到该文件 python test.py >> test.log 2>&1 但问题是,在脚本完成之前,文件是空的。 看起来它将输出写入某个缓冲区,并且只在最后将该缓冲区发送到文件 这对我来说是完全不可接受的,因为我有一个24/7运行的脚本

我对Python还很陌生,但我遇到了一个我无法解释/解决的奇怪行为。 基本上,我需要将python脚本输出转发到一个文件

例如:

while True:
  print('tick')
  time.sleep(5)
然后将输出重定向到该文件

python test.py >> test.log 2>&1
但问题是,在脚本完成之前,文件是空的。 看起来它将输出写入某个缓冲区,并且只在最后将该缓冲区发送到文件

这对我来说是完全不可接受的,因为我有一个24/7运行的脚本,在这种情况下,我将永远无法获得正确的日志。我需要实时写入文件

我知道它可能是通过使用

with open('test.log', mode='a') as log_file:
但在这种情况下,我将无法在终端中查看结果。 除此之外,我将严格限于脚本内部指定的文件

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

看起来它会将输出写入某个缓冲区

没错。您可以使用禁用此功能,因此:

试试这个:

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

这样,打印输出将转到文件而不是stdout

您可以更改Python的缓冲,但可能还需要更改终端/OS缓冲。您是否考虑过让您的脚本知道其写入的位置?在Unix上,脚本通常将路径视为stdout。要登录python,应该使用实现的日志类,其中所有函数都是现成的。
with open('log.log', 'w+') as log_file:    
print('tick', file=log_file)