Python中print()本质与sys.stdout.write()区别
在Python中print()命令普通常见,其本质是怎么运行的?估计知道的人不多…
print语句实现打印,技术上来说就是把一个或多个对象转换为其文本表达式形式,然后发送给标准输出流或者类似的文件流。
Python中向一个文件写东西是通过file.write(str)来实现,而print语句执行的操作本质也是一个写操作,只是将数据写到了stdout流并进行了特定的格式化。
print(obj)实质就是调用sys.stdout.write(obj ’\n’)
# 两者等价
sys.stdout.write('hello' '\n')
print('hello')
此处sys.stdout就是python中标准输出流,这个标准输出流默认是映射到打开脚本的窗口的,所以,我们的print操作会把字符打印到屏幕上。既然sys.stdout默认是映射到打开脚本的窗口,那么这个映射关系是否可以修改呢?
答案是肯定的,我们可以通过修改这种映射关系来把我们的打印操作重定向到其它地方,例如特定的文件。
print()重定向到某个指定文件
方法就是给sys.stdout赋值,修改它的指向。
import sys
sys.stdout = open('test.txt','w')
print 'Hello world'
我们让sys.stdout指向了一个文件对象。然后,再执行打印操作,这时,hello world输出在了一个文件test.txt中,也就是写入其中。
指定文件对象的print()怎么恢复
我们把打印重定向到了一个文件中,那么在程序后面每一处调用print操作的输出都在这个文件中,那么我们后面想要打印字符到屏幕怎么办?
所以,这就需要我们先保存原始的sys.stdout,后面想要恢复的时候再赋值就行了,实现如下:
import sys
temp = sys.stdout
sys.stdout = open('test.txt','w')
print 'hello world'
sys.stdout = temp #恢复默认映射关系
print('nice')
输出类型
stdout只能输出字符串,如果要输出数字,也需要先转成字符串形式的;
print可以直接输出各种类型。
换行
stdout输出结果后不自动换行,可以实现一些特殊要求,比如进度条。通过’\r’将游标移动到原行的行首,重新输出覆盖掉原来内容,实现动态进度条。
print会自动换行。
输出位置
print是默认调用了sys.stdout.write()方法将输出打印到控制台。
print 也可通过file参数将输出打印到其他文件中。
f = open('test.txt','a')
print('this is a test',file=f)
参考
1、 灰色世界的阿信
.
.
.
2019-02-19 21:18:24写于泰安市肥城市