参考文档

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. 我的2015年ccf的解答

    只做了前三个题,在本地调试好了,不知为什么错了,好歹做了那么久,就记录一下了(注:这不是标准答案,只是我给出的解答) 这是第一题的代码: #include<stdio.h> #includ ...

  2. js删除逗号

    var aaa="123,432,34.00 aaa.replace(/,/g, '');

  3. <转>ORACLE EBS中查看某个Request的Output File

    由于某些权限的限制,有时候哪怕System Administrator职责也只能看到某个Request信息,但是不能查看它的Output File(在“Requests Summary”窗口中“Vie ...

  4. ide vscode安装

    在linux系统中安装VSCode(Visual Studio Code)   在linux系统中安装VSCode(Visual Studio Code) 1.从官网下载压缩包(话说下载下来解压就直接 ...

  5. marquee实现跑马灯

    <!DOCTYPE html><html> <head><title>跑马灯大全</title> </head> <bod ...

  6. Trove系列(二)—Trove 的架构和流程介绍

    Trove主要逻辑目前Trove支持用户创建一个数据库服务实例,在实例里可以创建多个数据库并进行管理.数据库服务实例目前通过Nova API来创建,然后同样通过Nova API创建一个Volume(未 ...

  7. JSON实例(单对象)

    实例一: using System; using System.Web.Script.Serialization; namespace JSonDemo { //实体类 public class Pe ...

  8. iOS可执行文件__TEXT段限制 以及 Android 65K函数限制

    1.先看下苹果关于 .ipa上传的大小规定: 最大构建版本文件大小 解压 XXX.ipa size Payload/xxx.app/xxx  32位  32位 + 64位 有些2dx.u3d游戏 或是 ...

  9. selinux配置错误实例介绍

    错误原因 配置关闭SELinux,结果误操作 应修改配置文件/etc/selinux/config中的“SELINUX”参数的值, # SELINUX=enforcing  原始配置 SELINUX= ...

  10. xml声明中的standalone属性

    晚上,在测试tinyxml的时候,发现其中声明了<?xml version="1.0" standalone="no" ?>,经查,其含义为stan ...