问题描述:
在运行django服务器时,想把反馈信息重定向输出到文件里。python3 manage.py runserver 0.0.0.0:80 >log
并不能完成任务,url访问信息和程序出错信息仍然会输出到控制台。
输出重定向很简单, echo abc > log
就是把“abc”以擦写模式写到log里。。而echo abc>>log
则是以追加模式写到log里。
但是这样只能重定向一些正常的输出,而一些 warming 或者 error 信息却仍然会输出到控制台上。
问题分析:
这里要清楚 stdout 和 stderr 区别,stdout是程序执行时正常的输出,stderr是程序运行时的警示或错误反馈。
重定向的基本语法如下:
>
以擦写的模式重定向至…>>
以追加的模式重定向至…1
代表stdout
标准输出2
代表stderr
标准错误
>
或>>
默认是···1>log
,只重定向 stdout,对于 stderr则需要用 ··· 2> log
来完成。
Example:
这里有一个test.py文件:
print('123')
error
第一句是正常输出“123”,第二句会出错。
执行python3 test.py
:
123
Traceback (most recent call last):
File "x.py", line 2, in <module>
error
NameError: name 'error' is not defined
stdout重定向:python3 test.py >log
Traceback (most recent call last):
File "x.py", line 2, in <module>
error
NameError: name 'error' is not defined
“123”会输出到log文件里。
stderr重定向:python3 test.py 2>log
控制台只会输出“123”,而错误信息输出到log里。
解决方法
python3 manage.py runserver 0.0.0.0:80 >log 2>log
这样所有信息都重定向到log文件啦 *(@_@)*