相关文章推荐
愤怒的风衣  ·  Python 异步 ASGI ...·  2 周前    · 
仗义的柠檬  ·  Python:NumPy | Random ...·  2 周前    · 
刚毅的灭火器  ·  math — Mathematical ...·  2 周前    · 
酒量大的数据线  ·  Solved: [SOLVED] ...·  1 周前    · 
奔跑的骆驼  ·  结合使用 Oracle Database ...·  6 天前    · 
干练的地瓜  ·  亲吻那片花瓣 - 萌娘百科 万物皆可萌的百科全书·  2 年前    · 
行走的烤土司  ·  快打旋风3下载 快打旋风3「v3.2.0」中文版·  2 年前    · 
乖乖的围巾  ·  How Do I Create A ...·  2 年前    · 
玉树临风的苦瓜  ·  想做智能家居,到底是选华为还是小米好? - 知乎·  2 年前    · 
才高八斗的香蕉  ·  16话 我们的光-无暗英雄-漫画牛·  2 年前    · 
Code  ›  python中的print与sys.stdout开发者社区
python
https://cloud.tencent.com/developer/article/1674074
好帅的砖头
2 年前
作者头像
tnt阿信
0 篇文章

python中的print与sys.stdout

前往专栏
腾讯云
开发者社区
文档 意见反馈 控制台
首页
学习
活动
专区
工具
TVP
最新优惠活动
文章/答案/技术大牛
发布
首页
学习
活动
专区
工具
TVP 最新优惠活动
返回腾讯云官网
社区首页 > 专栏 > 一个安全研究员 > python中的print与sys.stdout

python中的print与sys.stdout

作者头像
tnt阿信
发布 于 2020-08-05 10:02:18
1.5K 0
发布 于 2020-08-05 10:02:18
举报

print与sys.stdout

在python中,print语句实现打印,从技术角度来说,这是把一个或多个对象转换为其文本表达式形式,然后发送给标准输出流或者类似的文件流,更详细的说,打印与文件和流的概念紧密相连。

我们都知道在python中,向一个文件写东西是通过类似file.write(str)方法实现的,而你可能没想到print语句执行的操作其实也是一个写操作,不过他把我们从外设输入的数据写到了stdout流,并进行了一些特定的格式化。当然,和文件方法不通,在执行打印操作是,不需要将对象转换为字符串(print已经帮我们做好了)。

print 123

等价于

import sys
sys.stdout.write(str()+'\n')

这里的sys.stdout也就是我们python中标准输出流,这个标准输出流默认是映射到打开脚本的窗口的,所以,我们的print操作会把字符打印到屏幕上。既然sys.stdout默认是映射到打开脚本的窗口,那么这个映射关系是否可以修改呢?

答案是肯定的,这也是python中常用的一个小技巧,我们可以通过修改这种映射关系来把我们的打印操作重定向到其它地方,例如特定的文件。方法就是给sys.stdout赋值,修改它的指向。看下面的例子:

import sys
sys.stdout = open('test.txt','w')
print 'Hello world'

可以看到,我们让sys.stdout指向了一个文件对象。然后,再执行打印操作,这时,hello world输出在了一个文件test.txt中:

这里写图片描述

但是,上面的代码有一个问题,我们把打印重定向到了一个文件中,那么在程序后面每一处调用print操作的输出都在这个文件中,那么我们后面想要打印字符到屏幕怎么办?

所以,这就需要我们先保存原始的sys.stdout,后面想要恢复的时候再赋值就行了,实现如下:

import sys
temp = sys.stdout
sys.stdout = open('test.txt','w')
print 'hello world'
sys.stdout = temp #恢复默认映射关系
print 'nice'

sys.stdout除了可以映射到一个文件外,还有什么可以做的吗?当然有的,你甚至可以将sys.stdout赋值为一个自定义的对象,前提是这个对象实现了write方法。毕竟print调用的就是sys.stdout.write()方法。你可以自定义write方法,实现一些复杂的操作。

class Test:
    def write(self,string):
        #do something you wanna do
test = Test()
temp = sys.stdout
 
推荐文章
愤怒的风衣  ·  Python 异步 ASGI 服务器及框架开发者社区
2 周前
仗义的柠檬  ·  Python:NumPy | Random Module | .gamma() | Codecademy
2 周前
刚毅的灭火器  ·  math — Mathematical functions — Python 3.14.5 documentation
2 周前
酒量大的数据线  ·  Solved: [SOLVED] Error 8273: geoprocessing services crashi... - Esri Community
1 周前
奔跑的骆驼  ·  结合使用 Oracle Database 11g 和 Python
6 天前
干练的地瓜  ·  亲吻那片花瓣 - 萌娘百科 万物皆可萌的百科全书
2 年前
行走的烤土司  ·  快打旋风3下载 快打旋风3「v3.2.0」中文版
2 年前
乖乖的围巾  ·  How Do I Create A Graph Using Koolplot In Code::Blocks? - CodeProject
2 年前
玉树临风的苦瓜  ·  想做智能家居,到底是选华为还是小米好? - 知乎
2 年前
才高八斗的香蕉  ·  16话 我们的光-无暗英雄-漫画牛
2 年前
今天看啥   ·   Py中国   ·   codingpro   ·   小百科   ·   link之家   ·   卧龙AI搜索
删除内容请联系邮箱 2879853325@qq.com
Code - 代码工具平台
© 2024 ~ 沪ICP备11025650号