将os.exec *输出路由到字符串

时间:2014-03-10 19:30:15

标签: python http cgi

我正在尝试修改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,所以请将您建议的替代方案发送给我。

1 个答案:

答案 0 :(得分:1)

代码已经在if self.have_fork的else分支中完成了所需的一切(除了设置Content-Length标头)。对于您的用例,似乎您总是希望使用子进程并且只是删除代码的if self.have_fork部分。