这是写出和python更好的方法

时间:2018-11-09 17:04:09

标签: python linux stdout stderr

我正在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. 哪一种将错误写入文件的更好方法?或者有更好的方法可以做到这一点。

感谢您的提问。

2 个答案:

答案 0 :(得分:2)

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

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

在shell中使用简单技巧:

$ python example.py &> log.txt

如果您要针对未处理的异常采取其他自定义行为,请设置sys.excepthook

答案 1 :(得分:0)

要将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

希望这会有所帮助。