【python】print · sys.stdout · sys.stderr

参考文档html

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

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

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

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

 

 

1.print

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

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

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.定义blog

'''ip

标准输出和标准错误(一般缩写为 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打印信息到网页
 

  

聊干净了,结束~

相关文章
相关标签/搜索