【问题标题】:Python cgi and stdinPython cgi 和标准输入
【发布时间】:2009-05-08 09:26:34
【问题描述】:

我正在使用 pycurl 通过 put 和 python cgi 脚本上传文件以在服务器端接收文件。本质上,服务器端的代码是:

while True:
   next = sys.stdin.read(4096)
   if not next:
       break
   #.... write the buffer

这似乎适用于文本,但不适用于二进制文件(我在 Windows 上)。 对于二进制文件,执行 stdin.read 的循环在接收到大约 10kb 到 100kb 的任何内容后会中断。有什么想法吗?

【问题讨论】:

    标签: python cgi stdin


    【解决方案1】:

    您需要以二进制模式运行 Python。更改您的 CGI 脚本:

    #!C:/Python25/python.exe
    

    或任何它所说的:

    #!C:/Python25/python.exe -u
    

    或者您可以像这样以编程方式进行:

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

    在开始阅读stdin之前。

    【讨论】:

    • 最后的斜线不应该是句号吗?
    • @unwind:哎呀,很好发现。现已修复。
    • 我很好奇.. 为什么有必要这样做?
    • @ThiefMaster:因为在 Windows 上,以文本模式读取会将 \r\n 转换为 \n,并且在读取字符 26 (EOF) 时会停止读取。这对于文本文件被认为是正确的,但会损坏二进制文件。
    【解决方案2】:

    使用mod_wsgi 代替 cgi。它将为您提供正确打开的上传输入文件。

    【讨论】:

      猜你喜欢
      • 2014-07-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-13
      • 1970-01-01
      • 1970-01-01
      • 2011-11-30
      相关资源
      最近更新 更多