Python。将 stderr 重定向到日志文件
我有一个关于tornado 和nginx 的Django 网站。
我拿了这个龙卷风发射器 脚本 (tornading.py)
然后我使用 python openid 输出一些信息到 sys.stderr。
结果我得到了 IOError。
如何使用日志包重定向它?
我想过
f = open("myfile.log", "w")
sys.stderr = f
或者
python tornado.py > /dev/null 2>&1
但是解决这个问题的最好方法是什么?
I have Django web-site working on tornado and nginx.
I took this tornado launcher script (tornading.py)
Then I'm using python openid that outputs some information to sys.stderr.
As a result I get IOError.
How can I redirect it using logging package?
I thought about
f = open("myfile.log", "w")
sys.stderr = f
or
python tornado.py > /dev/null 2>&1
But what is the best way to solve it?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
最好的方法是 openid 库不打印到 stderr,而是使用某种日志记录 API(例如日志记录模块)。我同意 thkala 的观点,即修改第三方代码从长远来看并不好,所以你应该修复它,然后向 openid 作者提供修复程序。
为了推动开源社区的发展,这是最好的解决办法。
The best way would be if the openid library didn't print to stderr, but used some kind of logging API instead (e.g. the logging module). I agree with thkala that modifying third-party code is not good in the long term, so you should fix it, and then provide the fix to the openid authors.
For the objective of advancing the open source community, that's the best way to solve it.
使用 shell 重定向更多的是一种解决方法,而不是解决方案,并且可能并不总是可行,具体取决于脚本的启动方式。
然而,它具有明显的优势,即您不必修改第三方代码。当您决定将上述代码从上游更新到最新版本时,本地修改(即使是很小的修改)也可能成为一个主要问题。
Using shell redirections is more of a work-around than a solution and it may not be always possible, depending on how the script is launched.
It has the distinct advantage, however, of you not having to modify third-party code. Local modifications - even minor ones - can become a major issue when you decide to e.g. update said code to its latest version from upstream.