我使用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
它不起作用。
答案 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)
终止该进程。