这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » STM32 » 【Python】标准输出重定向踩坑

共1条 1/1 1 跳转至

【Python】标准输出重定向踩坑

高工
2018-10-19 08:27:28     打赏

有时候,输出的内容太多直接打印在控制台是没办法查看的,所以,就会考虑将输出打印在指定的文件中。


方法一:将标准输出赋值为一个文件句柄,使用完成之后关闭。

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 

版权声明:本文为博主原创文章,转载请附上博文链接!




共1条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]