python系列教程141——print重定向

朋友们,如需转载请标明出处:https://blog.csdn.net/jiangjunshow

声明:在人工智能技术教学期间,不少学生向我提一些python相关的问题,所以为了让同学们掌握更多扩展知识更好地理解AI技术,我让助理负责分享这套python系列教程,希望能帮到大家!由于这套python教程不是由我所写,所以不如我的AI技术教学风趣幽默,学起来比较枯燥;但它的知识点还是讲到位的了,也值得阅读!想要学习AI技术的同学可以点击跳转到我的教学网站。PS:看不懂本篇文章的同学请先看前面的文章,循序渐进每天学一点就不会觉得难了!

print的内部相当于调用了sys.stdout。print和sys.stdout的关系如下:

print(X,Y)           # Or,in 2.6: print X,Y

等价于:

import sys

sys.stdout.write(str(X) + ' ' + str(Y) + '\n')

而我们可以把sys.stdout重新赋值给标准输出流以外的东西。换句话说,可以让print语句将文字传送到其他地方。例如:

import sys

sys.stdout = open('log.txt','a')       # Redirects prints to a file

...

print(x,y,x)                          # Shows up in log.txt

在上面的代码中我们把sys.stdout重设成已打开的文件对象。重设之后,程序中任何地方的print语句都会将文字写至文件log.txt的末尾,而不是原始的输出流。

在打印至文件后,还可以切换回来。因为sys.stdout只是普通的文件对象,你可以存储它,需要时再恢复它。

C:\misc> c:\python30\python

>>> import sys

>>> temp = sys.stdout                     # Save for restoring later

>>> sys.stdout = open('log.txt','a')     # Redirect prints to a file

>>> print('spam')                         # Prints go to file,not here

>>> print(1,2,3)

>>> sys.stdout.close()                    # Flush output to disk

>>> sys.stdout = temp                     # Restore original stream




>>> print('back here')                    # Prints show up here again

back here

>>> print(open('log.txt').read())         # Result of earlier prints

spam

1 2 3

在Python 3.0中,file关键字允许一个单个的print调用将其文本发送给一个文件的write方法,而不用真正地重设sys.stdout。因为这种重定向是暂时的,普通的print语句还是会继续打印到原始的输出流的。在Python 2.6中,当print语句以>>开始,后面再跟着输出的文件对象时,会有同样的效果:

log = open('log.txt','a')         # 3.0

print(x,y,z,file=log)# Print to a file-like object

print(a,b,c)         # Print to original stdout


log = open('log.txt','a')         # 2.6

print >> log,x,y,z              # Print to a file-like object

print a,b,c                      # Print to original stdout
上一篇:打印日志log4j简单配置


下一篇:【设计模式】里氏替换原则