2007-07-17

 

Python Cookbook 2.12 在windows平台下向stdout输出二进制数据

需求:

需要输出二进制数据(如,一个图像)到windows平台的标准输出.

讨论:

这里可以使用setmode函数,它位于Python中依赖平台(windows)的msvcrt模块中,用法如下:

import sys
if sys.platform == "win32":
    import os, msvcrt
    msvcrt.setmode(sys.stdout.fileno( ), os.O_BINARY)

现在你就可以调用sys.stdout.write向标准输出输出任意二进制数据.
在类Unix系统中,不会(也不需要)区分二进制文件和文本文件,然而在windows平台上,如果你要输出图像文件, 必须以二进制方式打开.而在Python中,sys.stdout文件对象默认的打开方式是文本模式,所以你需要做如上处理.
你可以让Python以二进制模式打开标准输出,通过给命令行解释器添加'-u'参数.比如,你的CGI脚本运行在Apache服务器下,在你的代码的第一行,可以这样写:

#! c:/python23/python.exe -u

在Python2.3后的安装版本下,上面的方式是可以工作的.问题是,你并不是总是能预计你的脚本会工作在哪个版本的Python下,所以本节开始给出的方法还是推荐使用的.setmode函数通过msvcrt模块让你能修改标准输出的打开模式,在这种情况下,你能保证是以二进制模式打开sys.stdout的.

相关说明:

sys.stdout.fileno(...)
    fileno() -> integer "file descriptor".

    This is needed for lower-level file interfaces, such os.read().



Comments: 发表评论



<< Home

This page is powered by Blogger. Isn't yours?