代码之家  ›  专栏  ›  技术社区  ›  flybywire

简单CGI脚本中的内部服务器错误(500)

  •  8
  • flybywire  · 技术社区  · 15 年前

    我正在尝试在配置服务器之后运行一个简单的CGI脚本。

    我的脚本如下:

    print "Content-type: text/html"
    print
    print "<html><head><title>CGI</title></head>"
    print "<body>"
    print "hello cgi"
    print "</body>"
    print "</html>"
    

    当我转到脚本URL时 http://127.0.0.1/~flybywire/cgi-bin/main.py 我得到:

    内部服务器错误

    服务器遇到内部错误或配置错误,无法完成您的请求。

    而在 error.log 我得到以下信息:

    [error] (8)Exec format error: exec of '/home/flybywire/www/cgi-bin/main.py' failed [error] [client 127.0.0.1] Premature end of script headers: main.py

    其他信息: Apache/2.2.8 (Ubuntu) DAV/2 SVN/1.4.6 Server at 127.0.0.1 Port 80

    6 回复  |  直到 8 年前
        1
  •  22
  •   Paul Stephenson    15 年前

    你可能需要一个 #!/usr/bin/python 在脚本顶部,告诉Apache使用Python来执行它。至少,我做到了,这对我很有效。

        2
  •  9
  •   Dave Everitt    10 年前

    另外,使用unix行尾保存文件(如果这是Linux服务器)。您确实使用 chmod +x 是吗?

    你可以使用 #!/usr/bin/env python 如果您在不同的环境中运行(因此 env 部分)。

        3
  •  1
  •   Shafiul    14 年前

    #!/usr/bin/env python
    

    在脚本顶部工作正常。我把它放在最上面,但是NetBeans把额外的代码(导入命令)放在页面的最上面,这让我发疯了:(

        4
  •  0
  •   Andre Miller    15 年前

    看起来Apache在执行它时遇到了问题。对于UNIX脚本,通常还需要在脚本顶部指定解释器。

    尝试将此添加到顶部:

    #!/usr/bin/python
    
        5
  •  0
  •   Mark Chackerian    8 年前

    也许您的问题是新的python版本需要括号()。

    所以你的:

    print "<body>"
    

    现在应该是:

    print ("<body>")
    
        6
  •  0
  •   Rohit Malgaonkar    8 年前

    删除程序中的第二行(打印) 我在我的Apache服务器(MacOSX)上尝试过,它工作正常。 别忘了chmod 755和sudo apachell重启 这是给python 2.7的

    print "Content-type: text/html"
    print "<html><head><title>CGI</title></head>"
    print "<body>"
    print "hello cgi"
    print "</body>"
    print "</html>"