python 的写出和错误哪个更好

Which is better way to write out and err of python

我在Linux中写python。我想将 python 输出和错误写入不同的文件,而不是在控制台上输出它们。

如果我有这个 python 文件 example.py:

print('console output')
print(1/0)

我尝试了不同的方式。
1.通过执行以下命令
python example.py >output 2>log
2.更新 example.py

logf = open("./log", "w")
try:
    print('console output')
    print(1/0)
except Exception as e:
    logf.write(str(e)) 

并执行python example.py >output

日志不同。 第一种方法:

Traceback (most recent call last):
  File "try.py", line 2, in <module>
    print(1/0)
ZeroDivisionError: division by zero

对于第二种方法:

division by zero

所以我想问一下:

  1. 为什么两个日志不一样?以及如何使第二个输出与第一个输出相同。
  2. 哪个是将错误写入文件的更好方法?或者有更好的方法。

感谢您帮我解答问题。

以简单、原始的方式保留脚本:

# example.py
print('console output')
print(1/0)

在shell中使用简单技巧:

$ python example.py &> log.txt

如果您想对未处理的异常进行一些其他自定义行为,请设置 sys.excepthook

将 stdout 和 stderr 合并到一个文件中,这在使用更多(或更少)命令时也很有帮助

python example.py 2>&1 > output
python example.py 2>&1 | more

让每个进入单独的文件

python example.py 2> error > output

忽略stederr

python example 2>/dev/null

希望对您有所帮助。