参考文档

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. mustache语法

    mustache 模板,用于构造html页面内容.在实际工作中,当同一个模板中想要调用不同的函数来渲染画面,在已经自定义好了的前提下,可以在渲染页面时对传入的参数进行手动判断.  以下是学习笔记内容: ...

  2. Linux基础命令---ziinfo

    zipinfo 在不解压的情况下,获取zip压缩文件的的详细信息.zipinfo列出了ZIP档案中有关文件的技术信息,最常见的是在MS-DOS系统上.这些信息包括文件访问权限.加密状态.压缩类型.版本 ...

  3. APP开发项目思维导图

    APP开发项目思维导图 下载思维导图:APP开发项目.xmind.zip --------------------------------------- APP开发项目 app项目标记: 未启动 功能 ...

  4. Js基础知识2-对象、对象属性全解

    Object对象 Object对象包含如下属性和方法,也就意味着一切对象(函数也是对象)都包含如下方法. 每种方法和属性在不同的对象中有不同的作用,并不是每种对象都有使用每个方法的必要. 下面是Obj ...

  5. web前端----JavaScript的DOM(一)

    一.什么是HTML  DOM HTML  Document Object Model(文档对象模型) HTML DOM 定义了访问和操作HTML文档的标准方法 HTML DOM 把 HTML 文档呈现 ...

  6. SP211 PRIMIT - Primitivus recurencis(欧拉回路)

    SP211 PRIMIT - Primitivus recurencis 欧拉回路 Warning: enormous Input/Output data 警告:巨大的输入/输出 经过若干(11)次提 ...

  7. centos下gitlab私服完整安装部署(nginx+MySQL+redis+gitlab-ce+gitlab-shell+)

    系统环境cat /etc/redhat-release CentOS release 6.8 (Final) nginx -vnginx version: nginx/1.9.15 redis-cli ...

  8. 20145205 武钰 《网络对抗》Exp8 Web基础

    一点题外话 本次实验我三号完成的,由于一些原因吧,一直没发博客,拖到了现在,这里说就是评判一下自己的懒惰. 实验后问题回答 (1)什么是表单 表单在网页中主要负责数据采集功能. 一个表单有三个基本组成 ...

  9. 20145327 《网络对抗》MSF基础应用

    20145327 <网络对抗>MSF基础应用 主动攻击ms08_067 两台虚拟机,其中一台为kali,一台为windows xp sp3(英文版) kali ip地址:192.168.4 ...

  10. Android 手机小闹钟

    Android 手机小闹钟 一.这一篇主要使用系统为我们提供的一个服务AlarmManager来制作一个Android小闹钟,同时还涉及到了自定义主题.判断第一次启动应用.自定义动画.对话框.制作关闭 ...