Python 2.x - 如何将二进制输出写入stdout?
有没有办法在Python 2.x中将二进制输出写入sys.stdout?在Python 3.x中,你可以直接使用sys.stdout.buffer(或者分离stdout等),但我找不到适用于Python 2.5/2.6的解决方案。
补充说明:我想把一个PDF文件(以二进制形式)推送到标准输出,以便在网页服务器上提供服务。当我尝试使用sys.stdout.write写这个文件时,它会在二进制流中添加各种回车符,导致PDF文件损坏。
补充说明2:对于这个项目,我需要在Windows Server上运行,不幸的是,所以Linux的解决方案不适用。
简单的示例(从磁盘上的文件读取,而不是动态生成,只是为了确认生成代码不是问题):
file = open('C:\\test.pdf','rb')
pdfFile = file.read()
sys.stdout.write(pdfFile)
5 个回答
8
你可以使用 argopen 这个库里的 argopen() 函数,它可以把短横线(-)当作输入和输出的方式来处理,并且在Windows系统上可以解决二进制模式的问题。
import argopen
stdout = argopen.argopen('-', 'wb')
stdout.write(some_binary_data)
10
你可以使用无缓冲模式来运行你的脚本,方法是输入:python -u script.py
。
-u Force stdin, stdout and stderr to be totally unbuffered. On systems where it matters, also put stdin, stdout and stderr in binary mode.
29
你在使用哪个平台呢?
如果你是在Windows系统上,可以试试这个方法(链接上说这个方法是针对Windows的)。
if sys.platform == "win32":
import os, msvcrt
msvcrt.setmode(sys.stdout.fileno(), os.O_BINARY)
网上有一些说法提到在Python 3.1中会有一个函数可以以二进制模式重新打开sys.stdout
,但我不太确定对于Python 2.x来说,除了上面提到的方法,还有没有更好的选择。