Python3 http.server:将日志保存到文件中

Pot*_*ips 3 python bash stdout python-3.x

我使用Python3.6编写了一个简单的HTTP服务器来重定向所有请求。

我写的文件可以在这里找到

我可以在 Win8.1 CMD 和 Ubuntu 16.04.3 Bash 中看到输出。但是,无论我尝试下面的任何方法,它都不起作用,日志无法保存到文件中。

nohup python3 ./filename.py > ./logfile 2>&1 &
python3 ./filename.py > ./logfile 2>&1 &
setsid ./filename.py > ./logfile 2>&1 &
Run Code Online (Sandbox Code Playgroud)

我尝试使用:

import sys
logfile = open('logfile.log','w')
sys.stdout = logfile
sys.stdin = logfile
sys.stderr = logfile
Run Code Online (Sandbox Code Playgroud)

它不起作用。

小智 6

默认情况下,Python 的 stdout 和 stderr 是缓冲的。正如其他响应者所指出的,如果您的日志文件为空,那么(假设您的日志记录正确)输出尚未刷新。

该脚本的链接不再有效,但您可以尝试将脚本作为python3 -u filename.py或等效的PYTHONUNBUFFERED=x python3 filename.py. 这会导致 stdout 和 stderr 流不被缓冲。

http.server使用标准库的模块来提供当前目录中的文件的完整示例:

PYTHONUNBUFFERED=x python3 -m http.server &> http.server.log & echo $! > http.server.pid

所有输出(stdout 和 stderr)都被重定向到http.server.log,可以对其进行尾部处理,并且服务器的进程 ID 被写入http.server.pid,以便您可以通过 杀死该进程kill $(cat http.server.pid)