【发布时间】:2014-11-09 20:25:13
【问题描述】:
有没有办法在 Python 2.x 中将二进制输出写入 sys.stdout?在 Python 3.x 中,您可以只使用 sys.stdout.buffer(或分离 stdout 等),但我无法找到 Python 2.5/2.6 的任何解决方案。
编辑,解决方案: 来自 ChristopheD 的链接,如下:
import sys
if sys.platform == "win32":
import os, msvcrt
msvcrt.setmode(sys.stdout.fileno(), os.O_BINARY)
编辑:我正在尝试将 PDF 文件(二进制形式)推送到标准输出,以便在 Web 服务器上提供服务。当我尝试使用 sys.stdout.write 写入文件时,它会将各种回车添加到导致 PDF 呈现损坏的二进制流中。
编辑 2:对于这个项目,不幸的是,我需要在 Windows Server 上运行,所以 Linux 解决方案已经出来了。
简单的虚拟示例(从磁盘上的文件读取,而不是动态生成,只是为了让我们知道生成代码不是问题):
file = open('C:\\test.pdf','rb')
pdfFile = file.read()
sys.stdout.write(pdfFile)
【问题讨论】:
-
当你做
sys.stdout.write()什么没用? -
解释见上文,但问题基本上是python在尝试将二进制流转换为字符串以进行写入时添加回车。
-
sys.stdout = os.fdopen(1, "wb")是否可以帮助您消除文本模式转换? (如果您不希望打印语句中的 NL,您仍然需要使用 sys.stdout.write。)(docs.python.org/library/os.html#os.fdopen) -
感谢您提出的好问题。我今天学到了一些新东西。
-
@Roger,令人惊讶的是
os.fdopen并没有解决它,尽管使用-u运行python 可以。-u确实带来了额外的开销