参考文档

Python重定向标准输入、标准输出和标准错误

http://blog.csdn.net/lanbing510/article/details/8487997

python重定向sys.stdin、sys.stdout和sys.stderr

http://www.cnblogs.com/guyuyuan/p/6885448.html

1.print

print obj 事实上是调用了sys.stdout.write(obj+'\n'),注意多了一个换行符

1a. print在python 2.X 和 python 3 上的区别

python 3  的print 函数应该是多了两个选项参数: end, file

  • end可以控制print结尾是换行、不换行、或是其他字符
#不换行
print("xx",end='')
  • file可以控制输出为sys.stdout 还是sys.stderr
print("XXX",sys.stderr)

2.sys.stdout和sys.stderr   

2a.定义

'''

标准输出和标准错误(通常缩写为 stdout 和 stderr)是建立在每个UNIX系统内的管道(pipe)

当你 print 某东西时,结果输出到 stdout 管道中;当你的程序崩溃并打印出调试信息时(象Python中的错误跟踪),结果输出到 stderr 管道中。

通常这两个管道只与你正在工作的终端窗口相联,所以当一个程序打印输出时,你可以看到输出,并且当一个程序崩溃时,你可以看到调试信息。(如果你在一个基于窗口的Python IDE系统上工作,stdout 和 stderr 缺省为“交互窗口”。)

'''

2b.使用

'''

stdout 和 stderr 都是类文件对象,就象我们在提取输入源中所讨论的一样,但它们都是只写的。它们没有 read 方法,只有 write。

然而,它们的确是类文件对象,并且你可以将任意文件对象或类文件对象赋给它们来重定向输出

'''

2c.缓冲

sys.stdout是有缓冲区的,解决缓冲有两种方式:

  • print() 或者sys.stdout.write()后加sys.stdout.flush()
  • 执行python脚本时增加-u 参数,即 python -u XXX.py

3. 特殊情况CGI 以及 重定向输出

通过以上可知原始的 stdout 和 stderr都是指向控制台

3a.CGI 的stdout

如果使用python 编写CGI脚本,此时stdout是指向输出的网页的,stderr依然指向控制台

所以直接使用print XXX,XXX是直接生成到页面中的;如果要调试打log,有两种方法:

  • 通过stderr来输出;
  • 临时修改stdout,使其指向控制台,即重定向输出

3b.重定向输出

  • 重定向输出到文件
f_handler=open('out.log', 'w') 

sys.stdout=f_handler
print 'hello'
  • 重定向输出到标准输出
#!/usr/bin/env python

import cgi

# 在CGI脚本下,sys.stdout输出到网页
web_out = sys.stdout # 保存下输出到网页的状态 sys.stdout = sys.stderr # 将标准输出改成控制台
sys.stdout.write('sys.stdout -> console') # 通过sys.stdout打印信息到控制台
print("print -> console") # 通过print打印信息到控制台 sys.stdout = web_out # 将标准输出改成网页
sys.stdout.write('sys.stdout -> web') # 通过sys.stdout打印信息到网页
print("print -> web") # 通过print打印信息到网页

  

聊干净了,结束~

【python】print · sys.stdout · sys.stderr的更多相关文章

  1. 【Python】print 方法的参数

    当在IDEL或者命令行中执行 help(print) 命令时,就可以看到 print 方法的详细说明: print(value, ..., sep=' ', end='\n', file=sys.st ...

  2. 【Python】print array时array中间是省略号没有输出全部的解决方法

    在开头加入: import numpy as np np.set_printoptions(threshold=np.inf) 大量元素情况 可以采用set_printoptions(threshol ...

  3. PyQt(Python+Qt)学习随笔:print标准输出sys.stdout以及stderr重定向QTextBrowser等图形界面对象

    专栏:Python基础教程目录 专栏:使用PyQt开发图形界面Python应用 专栏:PyQt入门学习 老猿Python博文目录 <在Python实现print标准输出sys.stdout.st ...

  4. 在Python实现print标准输出sys.stdout、stderr重定向及捕获的简单办法

    专栏:Python基础教程目录 专栏:使用PyQt开发图形界面Python应用 专栏:PyQt入门学习 老猿Python博文目录 Python中的标准输出和错误输出由sys模块的stdout.stde ...

  5. 【Python】 零碎知识积累 II

    [Python] 零碎知识积累 II ■ 函数的参数默认值在函数定义时确定并保存在内存中,调用函数时不会在内存中新开辟一块空间然后用参数默认值重新赋值,而是单纯地引用这个参数原来的地址.这就带来了一个 ...

  6. 【Python】【自动化测试】【pytest】

    https://docs.pytest.org/en/latest/getting-started.html#create-your-first-test http://www.testclass.n ...

  7. 【Python】-NO.96.Note.2.Python -【Python 基础】

    1.0.0 Summary Tittle:[Python]-NO.95.Note.1.Python -[Python 老男孩 基础]- Style:Python Series:Python Since ...

  8. 【Python】【容器 | 迭代对象 | 迭代器 | 生成器 | 生成器表达式 | 协程 | 期物 | 任务】

    Python 的 asyncio 类似于 C++ 的 Boost.Asio. 所谓「异步 IO」,就是你发起一个 IO 操作,却不用等它结束,你可以继续做其他事情,当它结束时,你会得到通知. Asyn ...

  9. 【python】多进程锁multiprocess.Lock

    [python]多进程锁multiprocess.Lock 2013-09-13 13:48 11613人阅读 评论(2) 收藏 举报  分类: Python(38)  同步的方法基本与多线程相同. ...

随机推荐

  1. C#中NPOI操作excel之读取和写入excel数据

    一.下载引用 下载需要引用的dll,即:NPOI.dll,NPOI.OOXML.dll,NPOI.OpenXml4Net.dll,ICSharpCode.SharpZipLib.dll(office2 ...

  2. python 读取二进制数据到可变缓冲区中

    想直接读取二进制数据到一个可变缓冲区中,而不需要做任何的中间复制操作.或者你想原地修改数据并将它写回到一个文件中去. 为了读取数据到一个可变数组中,使用文件对象的readinto() 方法.比如 im ...

  3. python在交互模式下直接输入对象后回车,调用的是对象的__repr__()方法,这个方法表示的是一个编码,用print+对象是调用对象的__str__方法

    交互模式下调用对象的__repr__()方法,这个方法表示的是一个编码 >>> u"国庆节快乐"u'\u56fd\u5e86\u8282\u5feb\u4e50' ...

  4. Java SE 基础知识(二)

    1. 类由两大部分构成:属性和方法.属性一般用名词来表示,方法一般用动词来表示. 2. 如果一个java源文件中定义了多个类,那么这些类中最多只能有一个类是public的,可以都不是public的. ...

  5. web前端----jQuery操作标签

    样式操作 样式类 addClass();// 添加指定的CSS类名. removeClass();// 移除指定的CSS类名. hasClass();// 判断样式存不存在 toggleClass() ...

  6. RabbitMQ详解(一)------简介与安装(Docker)

    RABBITMQ详解(一)------简介与安装(DOCKER) 刚刚进入实习,在学习过程中没有接触过MQ,RabbitMQ 这个消息中间件,正好公司最近的项目中有用到,学习了解一下. 首先什么是MQ ...

  7. 20145118 《Java程序设计》第6周学习总结

    20145118 <Java程序设计>第6周学习总结 教材学习内容总结 1.数据依靠串流在目的地与来源地之间传输,无论来去如何,只要取得InputStream或OutputStream的实 ...

  8. C++使用Socket 邮箱登录服务器验证

    转载:http://blog.csdn.net/zengraoli/article/details/36866241 转载:http://blog.csdn.net/alger_magic/artic ...

  9. Delphi XE5 for Android (七)

    Delphi XE5下,TMainMenu和TPopupMenu不可用,那么如何支持Android的菜单呢? 查看了一些资料,不得要领,只是摸索着先模拟一下吧. 首先在窗体上放置一个TPanel,在其 ...

  10. git下载速度太慢【学习笔记】

    使用了sshFQ的伙伴添加这个配置下载速度有极大的提升. git config --global http.proxy 'socks5://127.0.0.1:1080'