python2.*的print是一个语句,而非函数调用,后面可接任意类型。print语句的语法如下:
print x, y #把对象x, y打印到sys.stdout中,在对象之间加空格,在y之后添加换行
print x, y, #同上,不同之处在于y后不会添加换行
print >> afile, x, y #把文本输出到文件对象afile中,而不是sys.stdout中
print语句把对象输出到标准输出流sys.stdout(文件对象)中。标准输出流通常映射到启动python程序的窗口。print是通过调用文件对象sys.stdout的方法实现print功能的:
print 1
<=>
sys.stdout.write(str(1) + "\n")
可以看到print通过封装sys.stdout.write()方法,提供了更简单的操作接口。而且使用print语句时,不需要把对象转换成字符串。
虽然默认情况下,print将对象发送到标准输出流,但是可以通过重定向操作输出到文件中去。如何在脚本中实现重定向脚本的流?
- 通过对sys.stdout重新赋值为文件对象
sys.stdout = open("file", "a")
print X
print语句只是调用了sys.sydout.write()方法,而不管sys.stdout是什么。通过上面的赋值,所有的print语句都把对象打印到文件中。事实上,sys.stdout可以赋值成任意含有write()方法的对象。
- 自动化流重定向
上面的方法有个问题:没有保存原始输出流。
当然可以通过手动的方式,显式的保存和恢复原始输出流。但是需要的代码比较多。现在print语句提供了一个扩展功能用于解决上面的问题:
print >> fileobject, X
通过操作>>,允许暂时的进行重定向。这种扩展形式通常也用于把错误消息打印到标准错误流sys.stderr中。