简单Python CGI脚本添加包检测代码后触发内部服务器错误,求原因解析
问题原因及解决办法
最可能的原因:缺失HTTP头与响应体的分隔空行
CGI规范要求HTTP响应头和响应体之间必须有一个空行。你修改后的代码中,print "Content-Type: text/html"之后直接输出HTML内容,没有添加单独的print语句输出空行,导致服务器无法正确解析响应格式,触发500错误。
修复方法:在print "Content-Type: text/html"之后添加一行空的print:
print "Content-Type: text/html" print # 这行不能少,分隔HTTP头和响应内容 print "<html>"
其他可能的排查方向
- 捕获所有异常排查隐性错误
如果修复空行后仍有问题,可以添加全局异常捕获,把错误信息输出到页面,方便定位:
#!/usr/bin/env python import sys import cgitb cgitb.enable() # 开启CGI错误调试,直接在页面显示错误详情 version = sys.version.split('\n')[0] print "Content-Type: text/html" print print "<html>" print "<head><title>First Python HTTP Programming </title></head>" print "<body>" print "<h3>Python Version: </h3>" + version try: from bs4 import BeautifulSoup print "<h3> Already installed </h3>" except ImportError, e: # Python 2.7也支持这种写法,兼容性更好 print "<h3>Not installed: %s</h3>" % str(e) except Exception, e: # 捕获其他可能的异常 print "<h3>Unexpected error: %s</h3>" % str(e) print "</body>" print "</html>"
检查脚本执行权限
确保修改后的脚本权限和原脚本一致,一般需要设置为755(所有者读写执行,组和其他用户读执行),如果有权限修改的话,执行chmod 755 your_script.py。bs4依赖缺失
即使bs4已安装,它可能依赖lxml或html5lib等解析库,导入时如果这些依赖缺失,可能触发非ImportError的异常,上面的全局异常捕获可以帮你发现这类问题。
内容的提问来源于stack exchange,提问作者maurobio
相关产品推荐
相关产品推荐

