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

时间:2017-10-10 11:21:48

标签: python bash python-3.x stdout

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

我写的文件可以找到here

我可以在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 &

我试图使用:

import sys
logfile = open('logfile.log','w')
sys.stdout = logfile
sys.stdin = logfile
sys.stderr = logfile

它不起作用。

2 个答案:

答案 0 :(得分:1)

我已经在Ubuntu 16.04上尝试过你的代码,它就像魅力一样。

import sys
logfile = open('logfile.log','w')
sys.stdout = logfile
sys.stdin = logfile
sys.stderr = logfile

答案 1 :(得分:0)

默认情况下,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 < / em>,以便您可以通过kill $(cat http.server.pid)终止该进程。