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

时间:2011-07-20 12:44:33

标签: 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&amp;    #!的/ usr / bin中/本地/蟒蛇

任何帮助表示感谢。

EDIT 错误日志输出: (2)没有这样的文件或目录:'... / ... / ... / test.py'的执行失败 脚本标题的提前结束:test.py

1 个答案:

答案 0 :(得分:0)

这是我刚才写的东西。在对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"
    

    请注意,需要2行结束。

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

    import cgitb; cgitb.enable()
    

    如果cgitb不可用,则可以执行以下操作:

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

  7. 检查是否可以直接点击python脚本。如果不能,请按照上述步骤(2-6)进行修复。然后当Python脚本工作时,调试shtml。