Python cgi 与 stdin

1 投票
2 回答
2313 浏览
提问于 2025-04-15 11:27

我正在使用pycurl来通过put上传一个文件,同时在服务器端用python的cgi脚本来接收这个文件。简单来说,服务器端的代码是:

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

这个方法在处理文本文件时似乎没问题,但在处理二进制文件时就不行了(我在用Windows)。对于二进制文件,读取的循环在接收到大约10kb到100kb的数据后就会中断。有没有什么建议?

2 个回答

0

使用 mod_wsgi 来代替 cgi。这样可以确保你上传的文件能够正确打开。

3

你需要以二进制模式运行Python。把你的CGI脚本从:

#!C:/Python25/python.exe

或者无论它写的是什么,改成:

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

或者你也可以像这样通过代码来实现:

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

在开始从stdin读取之前。

撰写回答