sys.stdout.write对Windows上的二进制文件无法正常工作

时间:2011-02-14 19:49:01

标签: python file-io

我有一个python脚本,它处理所有传入的请求,并根据输入的类型生成/返回内容。

当我用

运行我的python脚本时
print "Content-Type: text/plain\r\n\r\n" #debug mode

生成的html是我期望的。但是,当我评论上面的行时,它会截断输出的一部分。我通过读取文件并使用sys.stdout.write写入输出来生成html。

代码链接

driver:http://pastebin.com/VULgJWEx(包含print语句)

处理程序:http://pastebin.com/j87rrQyx(包含写入stdout的writeFileToStdout)

示例

with Content-type:text -

Content-Length: 105

Content-Type: application/vnd.apple.mpegurl

#EXTM3U

#EXT-X-TARGETDURATION:10

#EXT-X-MEDIA-SEQUENCE:118394

#EXTINF:5,

20110203T230818-01-118403.ts

<小时/> 没有印刷品:

Content-Length: 105

Content-Type: application/vnd.apple.mpegurl

#EXTM3U

#EXT-X-TARGETDURATION:10

#EXT-X-MEDIA-SEQUENCE:118394

#EXTINF:5,

20110203T230818-01-118403  #(ts is missing!!)

最后一个ts被截断。


有人会知道为什么打印造成这种情况? (或者是别的什么?)

1 个答案:

答案 0 :(得分:3)

打印或标准输出没有问题(如预期的那样)。

我试图从二进制文件(在Windows上)读取并将其写入stdout。由于'sys'模块代表你打开'stdout'文件对象,通常在文本模式下这样做,事情就变得乱七八糟了。

所以,要解决这个问题:

msvcrt.setmode(sys.stdout.fileno(), os.O_BINARY)

link很好地解释了这个问题。