使用Python编写CGI脚本 - 在本地服务器上测试浏览器

3

我在尝试在Windows本地机器上测试一个CGI Python脚本. 我按照教程做的,所以很简单。这是我的Python脚本(名为test_cgi.py,位于cgi-bin目录中)。

print "Content-type: text/html"
print "<html>"
print "<title>Test CGI</title>"
print "<body>"
print "<p>Hello World!</p>"
print "</body>"
print "</html>"

这里有另外一个脚本可以启动服务器:

import BaseHTTPServer
import CGIHTTPServer
import cgitb; cgitb.enable()  ## This line enables CGI error reporting

server = BaseHTTPServer.HTTPServer
handler = CGIHTTPServer.CGIHTTPRequestHandler
server_address = ("", 8000)
handler.cgi_directories = [""]

httpd = server(server_address, handler)
httpd.serve_forever()

启动服务器后,当我导航到 http://localhost:8000/test_cgi.py 时,浏览器显示的不是HTML内容,而是脚本的全部内容。有什么想法吗?

  1. 是的,我所有的文件都有可执行权限。
  2. 是的,我也尝试从命令行执行 python -m CGIHTTPServer。这样可以成功启动服务器,我的脚本也一样。:(

附注: 你的脚本有一个错误。在"Content-type"行之后需要打印空行。 - Robᵩ
3个回答

1
我找到了答案——我的CGI脚本开头缺少解释器行。

0

您需要更改handler.cgi_directories,将其指向包含CGI脚本的目录。

假设您已将文件存储在名为cgi-bin的文件夹中,则以下操作应该可以解决问题:

handler.cgi_directories = ['/cgi']


尝试更改为“/cgi”和“/cgi-bin”,但无济于事。 :( 仍然显示整个脚本。 - rita

0

您已经使用当前工作目录<some-path>\cgi-bin启动了服务器。这对CGIHTTPServer不太有效。相反,从更高的一级开始启动(即<some-path>)。

另外:

  • 不要设置cgi_directories,使用默认设置即可。
  • 将浏览器指向http://localhost:8000/cgi-bin/test_cgi.py

我按照你说的做了,并从高一级开始。我还导航到你建议的链接,它没有给我404错误,但仍然打印出页面的所有内容。这让我发疯了!不管怎样,还是谢谢。 - rita
除了这两件事,您还不能设置.cgi_directories - Robᵩ

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接