我正在尝试修改Python的http.server.CGIHTTPRequestHandler,以便它为CGI脚本计算Content-Length
。以下是产生子进程的/Lib/http/server.py
代码。我想将输出捕获为一个字符串,以便我可以以字节为单位计算它的大小,然后发送到wfile,但我不知道如何将输出路由到字符串而不是文件描述符。
# Child
try:
try:
os.setuid(nobody)
except os.error:
pass
os.dup2(self.rfile.fileno(), 0)
os.dup2(self.wfile.fileno(), 1)
os.execve(scriptfile, args, env)
except:
self.server.handle_error(self.request, self.client_address)
os._exit(127)
(http://hg.python.org/cpython/file/3.3/Lib/http/server.py的第1129至1140行)
也许这是一个非常不正确的方法来计算Content-Length
,所以请将您建议的替代方案发送给我。
答案 0 :(得分:1)
代码已经在if self.have_fork
的else分支中完成了所需的一切(除了设置Content-Length标头)。对于您的用例,似乎您总是希望使用子进程并且只是删除代码的if self.have_fork
部分。