基于Head First Python的WebApp问题:CGI脚本返回源码而非生成页面
CGI脚本返回源码的排查要点
服务器未启用CGI处理
确认你的简易HTTP服务器是否使用了支持CGI的处理器。Python自带的http.server模块中,只有CGIHTTPRequestHandler能处理CGI脚本,普通HTTPServer会直接返回源码。正确的服务器代码示例:from http.server import CGIHTTPRequestHandler, HTTPServer server_address = ('', 8000) httpd = HTTPServer(server_address, CGIHTTPRequestHandler) # 若需自定义CGI目录,可添加如下配置 # httpd.handler_class.cgi_directories = ['/your_cgi_dir'] httpd.serve_forever()CGI脚本路径与目录配置不匹配
CGIHTTPRequestHandler默认仅处理/cgi-bin/或/htbin/目录下的脚本。检查你的index.html中超链接的路径,确保指向正确的CGI目录,比如:<a href="/cgi-bin/generate_list.py">生成列表</a>同时要保证
generate_list.py确实放在对应目录下。脚本缺少可执行权限或shebang行错误
- Linux/macOS环境下,给脚本添加可执行权限:
chmod +x generate_list.py - 脚本第一行必须添加正确的shebang,匹配系统Python路径,比如:
若shebang路径错误,服务器无法识别这是可执行脚本,会直接返回源码。#!/usr/bin/env python3
- Linux/macOS环境下,给脚本添加可执行权限:
脚本未输出正确的HTTP头
CGI脚本必须先输出HTTP响应头,否则服务器可能无法正确解析输出。确保generate_list.py开头有如下代码:print("Content-Type: text/html\n")
内容的提问来源于stack exchange,提问作者Kafka2701
相关产品推荐
相关产品推荐

