how to write std.error to file but std.out to console in python?
在这个例子中,我想用write来控制台(std.out)在try block中;但是当except block抛出异常时,我想把异常内容写到std.err中,它被重新定向到一个日志file中。
我只需要在except块中打开一个file,然后在上面打开write。但是,每个try-catch块都需要这样做,因此,如果有re-directing的替代方案,这些std.err的例外情况,并记录标准错误。
1 2 3 4 5 6 7 8
| >>> try:
... print"hello world"
... 1/0
... except ZeroDivisionError as e:
... print"exception"
...
hello world
exception |
- 我没有投票,但我不能对这个问题做正面或反面的回答(当你写一些东西到stdout时,会导致其他输出被重定向到stderr???)
- @NPE:我正在重新格式化这个问题。
- @立法者:我知道这件事。但我想知道是否可以将所有sys.stderr重新定向到一个文件,而不是默认的控制台文件。
这是绝对可能的:
1 2
| import sys
sys.stderr = open("/tmp/errors.txt","w") |
以下所有到stderr的打印都将转到该文件。
不过,您可能应该在shell级别而不是在Python级别完成这项工作——这要灵活得多。
- 这有一个(可能)不必要的副作用,那就是通过将所有异常回溯导入asker试图打印到的文件来消除它们。
- 好吧,OP问过如何将所有stderr重定向到一个文件。但我同意——就像我说的,这是个坏主意,而且在shell级别做得更好。
- @麦克斯诺尔:谢谢你的解决方案。至少我知道这是可能的,但我不会这么做的
如果要打印到stderr,请使用sys.stderr并让操作系统和用户处理打印到std.err的文本的位置。这允许用户在POSIX终端上运行python your_script.py 2> my_err_output,仍然捕获std.err内容。
如果要将日志记录信息输出到特定文件,请改用日志记录模块。
不要修改一个非常标准的概念的行为——那将是错误的。正确的日志记录允许您获取所需的信息,但允许预期的回溯(通过管道连接到stderr来获取)到用户,而无需找到您的特殊文件。
- 呻吟,双关语…+ 1
- 谢谢。将遵循黄金法则!
- @你也可以按照金科玉律,在答案上写上"帮助他人"的字样。