如何设置Python CGI服务器?

5 投票
4 回答
7994 浏览
提问于 2025-04-17 06:27

我在Windows上运行Python 3.2,想在我的电脑上搭建一个简单的CGI服务器来测试一下。到目前为止,我做了以下几件事:

我创建了一个Python程序,代码如下:

import http.server
import socketserver
PORT = 8000
Handler = http.server.CGIHTTPRequestHandler
httpd = socketserver.TCPServer(("", PORT), Handler)
httpd.serve_forever()

在同一个文件夹里,我还创建了一个叫“index.html”的简单HTML文件。然后我运行了这个程序,并在我的网页浏览器中访问了http://localhost:8000/,页面成功显示出来。接着,我在同一个目录下创建了一个叫“hello.py”的文件,代码如下:

import cgi
import cgitb
cgitb.enable()
print("Content-Type: text/html;charset=utf-8")
print()
print("""<html><body><p>Hello World!</p></body></html>""")

现在如果我访问http://localhost:8000/hello.py,我的网页浏览器显示的是上面的完整代码,而不是“Hello World!”。我该怎么让Python在提供这个文件之前先执行CGI代码呢?

4 个回答

1

启动一个用于开发的CGI服务器最简单的方法如下:

  • 创建一个主目录,里面放置所有的HTML和其他文件
  • 在主目录下创建一个名为 cgi-bin 的子目录,里面放置所有的CGI文件
  • 进入主目录
  • 运行 python -m http.server --cgi -b 127.0.0.1 8000

现在你可以连接到 http://localhost:8000,测试你的HTML代码和CGI脚本

2

虽然官方没有明确表示不再推荐使用,但 cgi 模块用起来有点笨重;现在大多数人都在用其他的东西(任何其他的东西!)

比如,你可以使用 wsgi 接口来编写你的脚本,这样可以更轻松高效地在很多 http 服务器上运行。为了帮助你入门,你甚至可以使用内置的 wsgiref 处理器。

def application(environ, start_response):
    start_response([('content-type', 'text/html;charset=utf-8')])
    return ['<html><body><p>Hello World!</p></body></html>'.encode('utf-8')]

然后可以在同一个文件中提供服务:

import wsgiref.simple_server
server = wsgiref.simple_server.make_server('', 8000, application)
server.serve_forever()
5

看看这个CGIHTTPRequestHandler的文档,里面讲了它是怎么判断哪些文件是CGI脚本的。

撰写回答