【发布时间】:2018-04-18 03:01:27
【问题描述】:
我想将我的 django (1.10.4) 应用程序的所有输出重定向到一个文件
首先,我尝试了:
python manage.py runserver 0.0.0.0:8000 >test.log 2>&1
但它不会重定向打印命令的输出。
例如,在我的代码中有一条语句:
print ('query_content:')
使用命令:
python manage.py runserver 0.0.0.0:8000
我可以看到屏幕上打印出“query_content:”。
但是有:
python manage.py runserver 0.0.0.0:8000 >test.log 2>&1
在 test.log 中,只有这样的内容:
[05/Nov/2017 20:38:20] "GET ... HTTP/1.1" 200 22404
[05/Nov/2017 20:38:26] "POST ... HTTP/1.1" 200 13
[05/Nov/2017 20:38:26] "GET .... HTTP/1.1" 200 16800
[05/Nov/2017 20:38:30] "GET ... 200 22430
...
一种解决方案是:
import sys
sys.stdout = open('file', 'w')
print 'test'
但有时无法更改python代码,有什么解决办法吗?
更新:
我发现如果日志文件已经存在,那么一切都很好。 但是如果我指定一个新的文件名,那么python“print ...”语句的输出就不能保存日志文件了。
【问题讨论】:
-
可能预期的输出实际上是正确输出的,但它是缓冲的,因此如果它与 stderr 输出混合,可能不会出现在您预期的位置。考虑在启动服务器时对 python 使用“-u”选项(这会影响性能)
-
无法复制。在我的 Django 1.10 中运行良好。
-
@JohnAnderson 看来问题与缓存有关。
-
没有办法,除了源代码,你不能干涉一个进程。您可以通过监听本地环回地址(原始套接字)的 8000 端口来做到这一点。