在进程完成之前将日志重定向到文件[重复]

Posted

技术标签:

【中文标题】在进程完成之前将日志重定向到文件[重复]【英文标题】:Redirect log to file before process finished [duplicate] 【发布时间】:2016-10-16 01:29:03 【问题描述】:

test.py(工作):

import time

_, a, b = [1, 2, 3]
print a
print b

运行代码:python test.py > test.log

您将在 test.log 中获得日志

test.py(不工作):

import time

_, a, b = [1, 2, 3]
print a
print b

while True:
    time.sleep(5)

但是这个你在日志中没有。

如何在程序完成之前获取日志,没有 python 日志模块(只使用重定向'>')?

【问题讨论】:

查找“刷新输出”。我将您的问题标记为与另一个问题重复。虽然它说的是“屏幕”而不是文件,但从您的程序的角度来看,它实际上是一回事。 import sys; sys.stdout.flush() 第五个答案适用于文件,但在该问题中不被接受。 【参考方案1】:

默认情况下,Python 缓冲区 stdout,因此日志以块的形式写入磁盘。您可以通过几种不同的方式关闭缓冲,这里有两种。调用脚本时可以使用-u选项,即:

python -u test.py

你可以使用环境变量PYTHONUNBUFFERED:

export PYTHONUNBUFFERED=true
python test.py

【讨论】:

以上是关于在进程完成之前将日志重定向到文件[重复]的主要内容,如果未能解决你的问题,请参考以下文章

从 bash 脚本本身将 stdout 的副本重定向到日志文件

在子进程中重定向 STDOUT

将特定日志从systemd服务重定向到单独的文件不起作用

如何将stdout和stderr都重定向到文件[重复]

在 PayPal 按钮重定向之前完成 AJAX 调用

将stdout和stderr重定向到一个文件,也重定向到linux中的控制台[重复]