python将控制台输出保存至文件的方法


Posted in Python onJanuary 07, 2019

很多时候在Linux系统下运行python程序时,控制台会输出一些有用的信息。为了方便保存这些信息,有时需要对这些信息进行保存。这里介绍几种将控制台输出保存到文件中的方式:

1 重定向标准输出流

重定向标准输出流有两种方式,既可以在每个print方法中进行重定向,如下所示:

# assume the log file is 'a.log'
# for python2
print >> a.log, 'print something'
# for python3
print('print something', file=a.log)

同时也可以在全局上进行设置:

import sys
f = open('a.log', 'a')
sys.stdout = f
sys.stderr = f # redirect std err, if necessary

2 使用tee命令重定向

上述方法的缺点在于重定向后,控制台就不再显示信息,可能对观察程序现象造成困难。使用tee命令则可以在保存标准输出的同时在控制台上仍然显示信息。使用范例如下:

python a_script.py 2>&1 | tee a.log

这种方法的缺点是控制台显示的内容会断断续续出现,与没有重定向时显示的方式有些不同。

3 自定义logger

我们可以在python程序中自定义一个记录者类,用来同时写文件以及在控制台进行显示。一个例子如下:

import sys
class Logger(object):
 def __init__(self, filename='default.log', stream=sys.stdout):
  self.terminal = stream
  self.log = open(filename, 'a')

 def write(self, message):
  self.terminal.write(message)
  self.log.write(message)

 def flush(self):
  pass

sys.stdout = Logger(a.log, sys.stdout)
sys.stderr = Logger(a.log_file, sys.stderr) # redirect std err, if necessary

# now it works
print 'print something'

此时控制台的显示也同原先一样正常。

以上这篇python将控制台输出保存至文件的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python实现360皮肤按钮控件示例
Feb 21 Python
Python中循环引用(import)失败的解决方法
Apr 22 Python
python破解zip加密文件的方法
May 31 Python
Python实现将Excel转换成xml的方法示例
Aug 25 Python
Django代码性能优化与Pycharm Profile使用详解
Aug 26 Python
pandas筛选某列出现编码错误的解决方法
Nov 07 Python
Python 实现try重新执行
Dec 21 Python
Python调用Windows命令打印文件
Feb 07 Python
Python如何使用bokeh包和geojson数据绘制地图
Mar 21 Python
解决安装新版PyQt5、PyQT5-tool后打不开并Designer.exe提示no Qt platform plugin的问题
Apr 24 Python
PyCharm2020.1.2社区版安装,配置及使用教程详解(Windows)
Aug 07 Python
用python 绘制茎叶图和复合饼图
Feb 26 Python
对Python捕获控制台输出流的方法详解
Jan 07 #Python
python print输出延时,让其立刻输出的方法
Jan 07 #Python
Python3 单行多行万能正则匹配方法
Jan 07 #Python
Python字符串的全排列算法实例详解
Jan 07 #Python
Python 3.3实现计算两个日期间隔秒数/天数的方法示例
Jan 07 #Python
Python进阶之自定义对象实现切片功能
Jan 07 #Python
Python基于matplotlib画箱体图检验异常值操作示例【附xls数据文件下载】
Jan 07 #Python
You might like
解析php根据ip查询所在地区(非常有用,赶集网就用到)
2013/07/01 PHP
在php和MySql中计算时间差的方法详解
2015/03/27 PHP
laravel框架创建授权策略实例分析
2019/11/22 PHP
js实现DIV的一些简单控制
2007/06/04 Javascript
各种效果的jquery ui(接口)介绍
2008/09/17 Javascript
javascript 日期时间函数(经典+完善+实用)
2009/05/27 Javascript
firefox事件处理之自动查找event的函数(用于onclick=foo())
2010/08/05 Javascript
JavaScript之IE的fireEvent方法详细解析
2013/11/20 Javascript
node.js实现多图片上传实例
2014/06/03 Javascript
node.js超时timeout详解
2014/11/26 Javascript
JavaScript实现Java中StringBuffer的方法
2015/02/09 Javascript
详解vue组件开发脚手架
2018/06/15 Javascript
jQuery实现的点击显示隐藏下拉菜单功能完整示例
2019/05/17 jQuery
laravel-admin 与 vue 结合使用实例代码详解
2019/06/04 Javascript
javascript如何实现create方法
2019/11/04 Javascript
Vue中keep-alive 实现后退不刷新并保持滚动位置
2020/03/17 Javascript
Javascript实现单选框效果
2020/12/09 Javascript
python动态加载变量示例分享
2014/02/17 Python
Python实现文件复制删除
2016/04/19 Python
Python判断两个list是否是父子集关系的实例
2018/05/04 Python
python如何从文件读取数据及解析
2019/09/19 Python
双向RNN:bidirectional_dynamic_rnn()函数的使用详解
2020/01/20 Python
解决TensorFlow GPU版出现OOM错误的问题
2020/02/03 Python
Python使用GitPython操作Git版本库的方法
2020/02/29 Python
极简的HTML5模版
2015/07/09 HTML / CSS
Bootstrap File Input文件上传组件
2020/12/01 HTML / CSS
加拿大最大的五金、家居装修和园艺产品商店:RONA
2017/01/27 全球购物
国际会议邀请函范文
2014/01/16 职场文书
心理学专业大学生职业生涯规划范文
2014/02/19 职场文书
房屋租赁协议书范本
2014/04/10 职场文书
优秀班组长事迹
2014/05/31 职场文书
总经理任命书范本
2014/06/05 职场文书
python 经纬度求两点距离、三点面积操作
2021/06/03 Python
sql注入教程之类型以及提交注入
2021/08/02 MySQL
vue动态绑定style样式
2022/04/20 Vue.js
HTML中实现音乐或视频自动播放案例详解
2022/05/30 HTML / CSS