python中sys.stdout和sys.stderr

最近,在发布脚本上线时,想要把输出结果和错误记录保存成日志(log),方便查看。

这样一来就用到了重定向:sys模块的stdout和stderr

1.stdout

查看stdout的介绍可见(https://docs.python.org/3/library/sys.html

stdout用于print和状态表达式的结果输出,及input()的瞬时输出

sys.__stdin__ ;sys.__stdout__;sys.__stderr__

These objects contain the original values of stdinstderr and stdout at the start of the program. They are used during finalization, and could be useful to print to the actual standard stream no matter if the sys.std*object has been redirected.

It can also be used to restore the actual files to known working file objects in case they have been overwritten with a broken object. However, the preferred way to do this is to explicitly save the previous stream before replacing it, and restore the saved object.

这三个实例包括了 stdinstderr 、stdout的用法。他们可以用于显示标准的信息流,不管sys.std**是否被重定向了。

以防工作文件被重写,这三个实例可以保存实际文件以显示工作文件中的展示结果。但是,保存的文件和路径必须在替换实例之前保存。

基于以上的结果可以得到如下结论:

1.print其实是一种特殊的输出方式,在sys.__stdin__默认的情况下,它将结果打印到屏幕上;

2.为了保存记录,可以修改sys__stdin__的输出结果为某个文件;

3.在2的基础上,进行print()时,print等价于write,结果直接写入文件。

举例说明:

import sys

__stdout__ = sys.stdout                     #将当前的默认输出路径保存为__stdout__
sys.stdout = open('log_abc.txt', 'a')       #将后续print输出结果直接写入在对应的文件

2.stderr

stderr与stdout一样,用于重定向错误信息至某个文件。

这里我们先定向错误信息都写入errorlog_abc.txt

__stderr__ = sys.stderr                     #将当前默认的错误输出结果保存为__stderr__
sys.stderr = open('errorlog_abc.txt', 'a')  #将后续的报错信息写入对应的文件中

 为了更准确的定位错误信息,使用trace模块的traceback函数:

 可见重定位后,屏幕上不显示报错信息,而是写入了txt文件:

出错位置和出错信息详细可见。 

关于try...except... 和traceback.print_exc()的使用,见文章(https://blog.csdn.net/weixin_44731100/article/details/88531845)。

  • 19
    点赞
  • 67
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值