当我们使用print(obj)在console上打印对象的时候,实质上调用的是sys.stdout.write(obj+'\n'),print在打印时会自动加个换行符,以下两行等价:

sys.stdout.write('hello'+'\n')
print('hello')

从控制台重定向到文件

原始的 sys.stdout 指向控制台,如果把文件的对象的引用赋给 sys.stdout,那么 print 调用的就是文件对象的 write 方法,将对象写入文件中:

f_handler=open('out.log', 'w')
sys.stdout=f_handler
print('hello')

如果你还想在控制台打印一些东西的话,最好先将原始的控制台对象引用保存下来,向文件中打印之后再恢复 sys.stdout

__console__=sys.stdout# redirection start
# ...
# redirection endsys.stdout=__console__

同时重定向到控制台和文件

如果我们希望打印的内容一方面输出到控制台,另一方面输出到文件作为日志保存,那么该怎么办?将打印的内容保留在内存中,而不是一打印就将 buffer 释放刷新,我们可以通过自定义一个类来实现这个功能:

import os,sysclass redirection():def __init__(self):self.buf = ''self.__console__ = sys.stdoutself.path = 'C:\\Users\\***\\Desktop'   # 存放日志的路径def write(self, output_stream):self.buf += output_streamdef to_log(self, filename):file = open(self.path + '\\' + filename, 'a')sys.stdout = fileprint(self.buf)file.closedef to_console(self):sys.stdout = self.__console__print(self.buf)def flush(self):self.buf = ''def main():obj = redirection()input_stream = input("输入:")while input_stream:    # 实现循环输入obj.write(input_stream + '\n')input_stream = input("输入:")obj.to_log('log.txt')   # 日志名称为log.txtobj.to_console()obj.flush()if __name__ == "__main__":main()

运行结果:

=================== RESTART: C:/Users/***/Desktop/tets.py ===================
输入:abcd
输入:12345
输入:hello
输入:
abcd
12345
hello

此时打开log.txt文件,会发现输出到console的三行文字也已经被写入。

python3 sys.stdout.write print 区别相关推荐

  1. python sys stdout_关于sys.stdout和print的区别详解

    一.sys.stdout的形式就是print的一种默认输出格式,等于print "%VALUE%" print函数是对sys.stdout的高级封装,看下print函数的解释 Pr ...

  2. python stdout用法_python学习之 sys.stdout和print

    转自:http://blog.csdn.net/wuxiushu/article/details/52358172 sys.stdout 与print 当我们在 Python 中打印对象调用print ...

  3. python3 sys.stdout.write 实时打印刷新

    话不多说先上一段代码 import time from datetime import datetime as dtfor i in range(5):print(dt.now())time.slee ...

  4. python3 sys.stdin.readline input 区别

    sys.stdin.readline( )会将标准输入全部获取,包括末尾的'\n', input()会把'\n'忽略 import sys a=sys.stdin.readline() b=input ...

  5. python中sys.stdout、sys.stdin

    如果需要更好的控制输出,而print不能满足需求,sys.stdout,sys.stdin,sys.stderr就是你需要的. 1. sys.stdout与print: 在python中调用print ...

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

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

  7. Python的sys.stdout、sys.stdin重定向

    Python的sys.stdout.sys.stdin重定向 转自:http://www.cnblogs.com/turtle-fly/p/3280519.html 本文环境:Python 2.7 使 ...

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

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

  9. python stdout_python 之sys.stdout小记

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

最新文章

  1. 这个 GitHub Trending 让我在腾讯会议中“换脸成”任何人!来唠唠如何上手
  2. 广域网协议:PPP协议和HDLC协议—Vecloud微云
  3. (57)模拟线程切换
  4. IntelliJ IDEA编码设置
  5. 炫界 (978) -(建工发现应用克隆漏)_除了DMA,这些漏损点检测与漏损区域识别技术你知道么?...
  6. 1-1:网络初识之了解什么是协议以及TCP/IP协议
  7. OpenShift 4 - 在离线环境中用 oc-mirror 获取 OpenShift 和 Opeartor 的相关镜像
  8. 中国大学MOOC“Python程序设计基础”第6次开课时间
  9. 小程序加载图片失败,默认图片的替换方法
  10. c语言判断素数(质数)
  11. 转载 三极管饱和及深度饱和状态的理解和判断!!
  12. 华为16道经典面试题
  13. python复数类型的虚部通过什么表示_Python小白必备知识:Python复数类型(complex)详解...
  14. python 处理 图像和视频
  15. 软著注销流程 软件著作权撤销 操作流程
  16. VUE解决路由里的参数改变页面却没有跳转的问题
  17. prometheus监控+告警
  18. 深信服2018春季招聘-研发卷编程题 - 题解
  19. HDU - 6070 Dirt Ratio (二分 + 线段树)
  20. usgs dem 导入matlab 程序,用GDAL打开从USGS下载的img影像文件

热门文章

  1. 系列TCP/IP协议-广播与多播(010)
  2. 甘肃张掖祁连山境内出现雪豹
  3. 分布式理论(一) - CAP定理
  4. JAVA学习日记DAY1
  5. 51Nod 1003 阶乘后面0的数量(数学,思维题)
  6. Unity3D绑定button监听事件
  7. 【转】txt中导入数据,matlab画图问题
  8. xcode 学习笔记2:动态添加view
  9. Unity Application Block-配置文件的使用-示例(附×××)
  10. 《Spark大数据分析:核心概念、技术及实践》一3.6 惰性操作