【发布时间】:2017-03-30 21:14:06
【问题描述】:
我正在尝试使用Python 2.x 中的 HTML-PDF Web 服务在 Windows 中生成 PDF。这个链接Python 2.x - Write binary output to stdout? 说如果我将二进制文件写入标准输出,我需要修改它。
def generate_pdf():
pdf = callservice(html)
if pdf is not None and sys.platform == "win32":
import os, msvcrt
msvcrt.setmode(sys.stdout.fileno(), os.O_BINARY)
return pdf
def process():
pdf = generate_pdf()
# This comes as IOError Errno 12 not enough space
E:\ 运行此程序的驱动器有 10 GB 可用空间。有谁知道会发生什么? C:\ 驱动器也有 10 GB 可用空间。我们是否应该检查msvcrt 的源代码以查看发生了什么。我正在尝试检查。
【问题讨论】:
-
您是否正在将 PDF 写入标准输出,该标准已被重定向到驱动器
E:或驱动器C:上的文件? -
sys.stdout.fileno() 只是 1,我从 Shell 将这个脚本作为 python file.py 运行,这能回答你的问题吗?
-
如果您没有将标准输出重定向到磁盘文件,我认为没有理由将其更改为二进制模式。
-
您的脚本在哪里尝试创建文件?在工作目录中?工作目录取决于 python.exe 的启动方式。它与“file.py”的位置无关。
-
Windows C 运行时实现低 (POSIX) 和标准 I/O。 Python 2.x
file对象包装 C 标准 I/OFILE流,这些流包装 POSIX 整数文件描述符(依次映射到实际的 WindowsFile句柄)。fileno方法返回文件描述符。最初,C 运行时的 3 个标准FILE流——stdin、stdout和stderr——作为文件描述符 0、1 和 2 打开,最初是 Python 的sys.stdin、sys.stdout和sys.stderr包装对应的 CFILE流。
标签: python windows python-2.7