内部服务器错误500 - Python, CGI
我的 .py 文件在终端里运行得很好,但在浏览器里却出现了这个错误。
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>500 Internal Server Error</title>
</head><body>
<h1>Internal Server Error</h1>
...
...
这是我的 .py 文件:
#!/usr/bin/python
import cgi
import cgitb; cgitb.enable()
print "Content-Type: text/html\n\n" # HTML is following
print # blank line, end of headers
print "<TITLE>CGI script output</TITLE>"
print "<H1>This is my first CGI script</H1>"
print "Hello, world!"
我应该把这个文件保存为 .cgi 格式吗?我试过这样做,但还是出现同样的错误。我尝试了很多这样的文件,但都不行。我确定 Apache 服务器是正常工作的,因为同一个目录下还有其他 .cgi 脚本在运行,没有问题。
我还试过以下几种方式: #!/usr/local/bin/python & #!/usr/bin/local/python
任何帮助都非常感谢。
编辑 错误日志输出: (2) 没有这样的文件或目录:执行 '.../.../.../test.py' 失败 脚本头部提前结束:test.py
1 个回答
这是我之前写的一些内容。这些是排查Python CGI问题时需要注意的一些好点子。
以下是让Python在CGI中正常工作的几个小贴士。
Apache设置:这可能是旧的内容
通过修改配置,将Python添加为CGI:
Options Indexes FollowSymLinks ExecCGI
AddHandler cgi-script .cgi .py
一定要通过Apache浏览页面。 注意,通过浏览器直接查看文件系统中的文件对大多数HTML页面有效,但对CGI不适用。要让脚本正常工作,必须通过htdocs文件系统打开。你的浏览器地址栏应该像这样:
\\127.0.0.1\index.html or \\localhost\index.html
如果你通过文件系统打开文件,CGI将无法工作。比如如果你的浏览器地址栏是这样的:
c:\Apache\htdocs\index.html (or some other example location)
将脚本的行尾转换为Unix格式: 大多数编辑器都有“显示行尾”的选项,然后可以用工具将格式从Unix转换为PC格式。你必须将行尾设置为Unix格式。
在CGI脚本的第一行指定Python解释器的路径: 你的Python CGI脚本的第一行必须是以下其中一行:
#!C:\Python25\Python.exe #!/usr/bin/python
第一行适用于在PC上调试,第二行适用于像1and1这样的服务器。我通常保留这些行,然后在上传到服务器后再删除第一行。
在打印任何其他输出之前,先打印一个指定HTML的内容类型: 这可以通过在脚本的很早处添加以下行来简单实现:
print "Content-Type: text/html\n\n"
注意需要两个行尾。
设置Python脚本以提供调试信息: 导入以下内容以获取详细的调试信息。
import cgitb; cgitb.enable()
如果cgitb不可用,另一种方法是这样做:
import sys sys.stderr = sys.stdout
在服务器上,Python脚本的权限必须设置为可执行。 上传文件后,确保编辑第一行并设置文件的执行权限。
检查一下你是否可以直接访问Python脚本。如果不能,请按照上述步骤(2-6)进行修复。然后,当Python脚本正常工作时,再调试shtml。