您当前的位置:首页 > 计算机 > 系统应用 > Linux

Linux下将控制台输出保存至文件

时间:01-28来源:作者:点击数:

1. tee命令重定向

在 Linux 终端执行直接 run 代码时,可以在执行命令后加上 2>&1,在保存输出信息到文件的同时,终端仍正常打印信息。

python run.py 2>&1 | tee train.log

将控制台打印的信息保存到当前目录下,文件命名为 train.log,如果要指定保存路径,只需要在 train.log 前加上对应的路径,比如:

python run.py 2>&1 | tee backup/train.log

2. 重定向标准输出流

重定向标准输出流有两种方式:

  • 在每个单独的 print 方法中进行重定向
  • 在全局设置重定向

1)在每个单独的 print 方法中重定向,需要在每个 printf 中进行修改:

# assume the log file is 'train.log'

# for python2
print >> train.log, 'print content'
# for python3
print('print content', file=train.log)

2)在全局设置重定向,比单独设置要方便很多,在 python 文件里添加:

# assume the log file is 'train.log'

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

这两种重定向方法的缺点在于:控制台不再打印信息,可能对观察程序执行状态造成不便。


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'

方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门