有时候,输出的内容太多直接打印在控制台是没办法查看的,所以,就会考虑将输出打印在指定的文件中。
方法一:将标准输出赋值为一个文件句柄,使用完成之后关闭。
output = sys.stdout
outputfile = open('test.txt', 'a')
sys.stdout = outputfile
print('hello')
outputfile.close()
sys.stdout=output # 重要!使用完成之后需要将标准输出重置
1
2
3
4
5
6
优点: 理解简单
缺点:
1、很容易忘记关掉文件的操作
2、如果输出部分是个异步获取的函数,关闭文件和重置标准输出又必须在异步获取数据之后。
问题:
1、如果不重置标准输出会发生什么?程序结束后临时对象就会被释放。
2、如果不关闭文件会发生什么?Python会在程序结束后的某个时间关闭文件,如果多个进程对文件进行读写,可能就会出现错误。
使用方法一需要注意:如果多个方法对文件进行写操作,可能会出现冲突,需要使用互斥锁来避免。
方法二:直接使用print()的参数file来指定输出的文件。
with open('test.txt', 'a') as f:
print('hello', file=f,flush=True)
1
2
这种方法直接使用with和print的参数完成标准输出的重定向,with会自动进行文件的关闭,不涉及标准输出的重定向操作。
print的各个参数分析:
print(*values,sep=' ',end='\n',file=sys.stdout,flush=Flase)
1
*values:要打印的值
sep=’ ',定义各个值的分隔方式,默认是空格
end=’\n’,print中传入值之后的符号,默认是换行,可以设置其他符号
file=sys.stdout,需要将print中的内容打印的地方,可以指定一个文件,默认是标准输出
flush=False,该参数主要是刷新,默认False,表示不刷新。正常情况中,print到f中的内容是先存储到内存中,当文件关闭时才把内容输出到指定的文件中,当flush=True就是立即把内容刷新到文件中。
方法三:使用Python中提供的log模块
logging.basicConfig(filename='log.log',
format='%(asctime)s - %(name)s - %(levelname)s -%(module)s: %(message)s',
datefmt='%Y-%m-%d %H:%M:%S %p',
level=10)
logging.debug('debug')
logging.info('info')
logging.warning('warning')
logging.error('error')
logging.critical('critical')
logging.log(10,'log')
1
2
3
4
5
6
7
8
9
10
11
根据log模块,可以将需要打印的信息显示在文件中。
---------------------
作者:peiyao456
来源:CSDN
原文:https://blog.csdn.net/peiyao456/article/details/82858508
版权声明:本文为博主原创文章,转载请附上博文链接!