Python 2.x - 如何将二进制输出写入stdout?

36 投票
5 回答
21513 浏览
提问于 2025-04-15 19:58

有没有办法在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来说,除了上面提到的方法,还有没有更好的选择。

撰写回答