内部服务器错误500 - Python, CGI

3 投票
1 回答
4575 浏览
提问于 2025-04-16 21:55

我的 .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 个回答

1

这是我之前写的一些内容。这些是排查Python CGI问题时需要注意的一些好点子。

以下是让Python在CGI中正常工作的几个小贴士。

Apache设置:这可能是旧的内容

通过修改配置,将Python添加为CGI:

    Options Indexes FollowSymLinks ExecCGI
    AddHandler cgi-script .cgi .py
  1. 一定要通过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)
    
  2. 将脚本的行尾转换为Unix格式: 大多数编辑器都有“显示行尾”的选项,然后可以用工具将格式从Unix转换为PC格式。你必须将行尾设置为Unix格式。

  3. 在CGI脚本的第一行指定Python解释器的路径: 你的Python CGI脚本的第一行必须是以下其中一行:

    #!C:\Python25\Python.exe
    #!/usr/bin/python
    

    第一行适用于在PC上调试,第二行适用于像1and1这样的服务器。我通常保留这些行,然后在上传到服务器后再删除第一行。

  4. 在打印任何其他输出之前,先打印一个指定HTML的内容类型: 这可以通过在脚本的很早处添加以下行来简单实现:

    print "Content-Type: text/html\n\n"
    

    注意需要两个行尾。

  5. 设置Python脚本以提供调试信息: 导入以下内容以获取详细的调试信息。

    import cgitb; cgitb.enable()
    

    如果cgitb不可用,另一种方法是这样做:

    import sys
    sys.stderr = sys.stdout
    
  6. 在服务器上,Python脚本的权限必须设置为可执行。 上传文件后,确保编辑第一行并设置文件的执行权限。

检查一下你是否可以直接访问Python脚本。如果不能,请按照上述步骤(2-6)进行修复。然后,当Python脚本正常工作时,再调试shtml。

撰写回答