我使用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
没用。
最佳答案
默认情况下,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,可以被tail,服务器的进程ID被写入http.server.pid 以便您可以通过 kill $(cat http.server.pid)
终止进程.
关于Python3 http.server : save log to a file,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46665484/