print与sys.stdout

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

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

print 123

等价于

import sys
sys.stdout.write(str(123)+'\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 dotest = Test()
temp = sys.stdout
sys.stdout = test
print 'hello world'

前面我们是通过给手动给sys.stdout赋值改变print的输出位置,实际上print操作还有更简单的实现重定向的方式,再python2.7下,我们可以通过下面这种形式:

log = open('log.txt','a')
print >> log,'hello world' #重定向到文件log.txt中
print 'hello world' #输出到默认位置

这样一来就方便多了,当然类似的方法也可以应用到sys.stdin上,raw_input()就是调用了sys.stdin.read()方法,所以通过本文的阐述,我想大家应该清楚可以怎么做了。

![这里写图片描述](https://img-blog.csdn.net/20180613104153419?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2hlX2FuZA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70) 关注我,了解更多精彩内容

python的print与sys.stdout相关推荐

  1. python标准输入stdout_python 标准输出 sys.stdout 重定向

    环境:python2.7 1.sys.stdout 和 print 关系 调用 python 打印对象 print obj的时候,事实上其实是都用了 sys.stdout.write(obj+'\n' ...

  2. python标准输入输出用来干什么_python 以标准输出(sys.stdout)为例,看python的标准输入、标准错误输出...

    标准输出(sys.stdout)对应的操作就是print(打印)了,标准输入(sys.stdin)则对应input(接收输入)操作,标准错误输出和标准输出类似也是print(打印). python最基 ...

  3. pythonsys标准_python 以标准输出(sys.stdout)为例,看python的标准输入、标准错误输出...

    标准输出(sys.stdout)对应的操作就是print(打印)了,标准输入(sys.stdin)则对应input(接收输入)操作,标准错误输出和标准输出类似也是print(打印). python最基 ...

  4. python stdout_python 之sys.stdout小记

    标准输出(sys.stdout)-->print(打印) 标准输入(sys.stdin)-->input(接收输入) 标准错误输出和标准输出类似也是print(打印). python最基本 ...

  5. Python sys.stdout

    当我们在 Python 中打印对象调用 print(obj) 时候,事实上是调用了 sys.stdout.write(obj+'\n') print 将你需要的内容打印到了控制台,然后追加了一个换行符 ...

  6. python读取print输出的内容_Python文件中将print的输出内容重定向到变量中

    有时候需要用到别人的代码, 但是又不想修改别人的文件, 想拿到输出的结果, 这时候就需要使用sys模块, 将print输出的内容重定向到变量中. Python调用sys模块中的sys.stdout, ...

  7. sys.stdout.write与sys.sterr.write(一)

    目标: 1.使用sys.stdout.write输入0-9数字 2.使用sys.stderr.write输出0-9数字 3.使用两种方式输出0-9,显示0变化到9的过程 1.使用sys.stdout. ...

  8. sys.stdout.flush()

    python的stdout是有缓冲区的,给你个例子你就知道了 import time import sysfor i in range(5):print i,#sys.stdout.flush()ti ...

  9. python捕获print标准输出

    起因 写函数的时候把需要用的东西都print了. 结果后面要用的print的东西. 又不想再return. 索性像个办法把print捕获作为一个string. 经过 print的实质是调用了系统的标准 ...

  10. python 中sys.stdout.write 和 print sys.stdout的区别(转)

    下面应该可以解你的惑了: print >> sys.stdout的形式就是print的一种默认输出格式,等于print "%VALUE%" 看下面的代码的英文注释,是p ...

最新文章

  1. 自定义apt升级脚本
  2. 人工智能的学习,需要学习哪些算法和数学知识呢?需要什么学历?
  3. Spring-在IoC中装配Bean系列文章导读
  4. 北大计算机博进高校,他是北大第一位博士,留校任教却连做三件“傻事”,博导都没评上...
  5. Python fire官方文档教学(自动生成命令行,个人觉得意义不大,不如argparse)
  6. smarty 简单分页
  7. 利用OpenCV抠图技术实现影视中“隐身”特效
  8. mongodb 存储过程 遍历表数据_一个mongodb存储过程
  9. ROS Nodelet使用
  10. DELL LATITUDE E5510 笔记本电脑屏幕闪烁问题的解决.
  11. 《遥感原理与应用》孙家抦版知识点总结(含简答题)——第三章
  12. 网络广告文案写作的技巧
  13. 谷爱凌拿到第三金,1620这串数字到底代表什么意思?
  14. 关于按键精灵url的post方法返回值为空
  15. 审视AI界的“SOTA成瘾”丨AI学者万字论述
  16. Python中 {:.0f} 格式化输出,{0:^30}什么意思 . format(name))
  17. 04.freetype显示中文
  18. 最严谨的计算机语言p,一款全新的 高级PLC编程语言 P语言 简介-专业自动化论坛-中国工控网论坛...
  19. mysql is双竖线_MySQL 5.0 新特性教程 存储过程:第二讲
  20. 压力使人头秃是真的!元凶已被哈佛西湖大学揪出,还给出生发秘诀 | Nature

热门文章

  1. 创业感悟:对未来越有信心,对现在就越有耐心
  2. Evasion 使用及实际免杀测试
  3. [乡土民间故事_徐苟三传奇]第廿三回_吃蒸肉财主受捉弄
  4. [中国近代史] 第四章测试
  5. 中国近代史纲要考研选择题
  6. 在计算机中360云盘如何删除文件,如何在360云盘中检索已删除的文件
  7. 爬虫第四关——寻找周杰伦
  8. 网络摄像机目前的主流解决方案
  9. 个人社区(博客)项目Romantic——功能模块划分
  10. php常用的终止语录,下定决心结束感情的话 终止感情的经典语录