【问题标题】:Why do I get a blank page when using Python CGI in Tomcat为什么在 Tomcat 中使用 Python CGI 时出现空白页
【发布时间】:2013-02-05 03:47:40
【问题描述】:

我刚开始学习 Python CGI,但我连测试最简单的 Python CGI 程序都没有。

我使用的是 Tomcat 6.0。我已经删除了web.xml 中的cmets,还添加了<Context privileged="true">。在web.xml 中,我将“cgiPathPrefix”的值设为“cgi-bin”,并将此cgi-bin 文件夹添加到webapps/ROOT 目录中。

cgi 程序很简单;如下同名test.cgi:

#!/usr/bin/python

print("Content-type: text/html")
print()
print("<title>CGI 101</title>")
print("<h1>A First CGI Example</h1>")
print("<P>Hello, CGI World!</p>")

当我转到http://localhost:8080/cgi-bin/test.cgi 时,我只是得到一个空白页。

这个设置有什么问题?

【问题讨论】:

  • 如果你看空白页源码,里面有什么吗?
  • 这并不能回答你的问题,但是:cgi 是一种古老的概念。我建议你使用 mod_wsgi - 这是运行 python 应用程序的“现代方式”。
  • 当我检查日志时,我发现: INFO: cgi: runCGI (stderr):Execution of C:\Tomcat 6.0\webapps\ROOT\cgi-bin\test.cgi 由于编译错误而中止. 2011 年 8 月 12 日上午 10:41:21 org.apache.catalina.core.ApplicationContext 日志信息:cgi: runCGI (stderr):syntax error at C:\Tomcat 6.0\webapps\ROOT\cgi-bin\test.cgi 行2、靠近")
  • 我使用 Python3。而且我试过用print,也是一样。

标签: python tomcat cgi tomcat6


【解决方案1】:

我在不同的上下文中遇到了同样的问题。基本上,我认为 eryksun 在 cmets 中解决了 OP 的问题,并提出了以下建议:

可执行参数是否设置为空字符串?

使用 Tomcat 7.0 我设置了所有内容,以便服务器在启动时不会产生任何错误,它允许我从 WEB-INF/cgi 请求一个 200“OK”响应,但它给出了一个空白 html页面,就像 OP 指出的那样。

解决方案是将默认参数扩展至 conf/web.xml:

<servlet>
    <servlet-name>cgi</servlet-name>
    <servlet-class>org.apache.catalina.servlets.CGIServlet</servlet-class>
    <init-param>
      <param-name>debug</param-name>
      <param-value>0</param-value>
    </init-param>
    <init-param>
      <param-name>cgiPathPrefix</param-name>
      <param-value>WEB-INF/cgi</param-value>
    </init-param>
    **<init-param>
      <param-name>executable</param-name>
      <param-value>c:\myexact\path\to\perl.exe</param-value>
    </init-param>
    <init-param>
      <param-name>passShellEnvironment </param-name>
      <param-value>true</param-value>
    </init-param>**
<load-on-startup>5</load-on-startup>

</servlet>

我的补充在上面用粗体 (**) 表示。

关键信息基本上来自 eryksun 建议的来源:

http://tomcat.apache.org/tomcat-7.0-doc/cgi-howto.html

【讨论】:

    【解决方案2】:

    您的示例代码不是正确的 HTML。你至少需要

     <html>,<head> and <body> 
    

    标签。

    如果添加这些不能解决问题,那么它是您的服务器配置的问题,并且可能更适合 serverfault.com 的问题如何调试您的 Tomcat 出了什么问题。

    【讨论】:

    • 我添加了标签。还是不行。日志说:Aug 12, 2011 10:51:14 AM org.apache.catalina.core.ApplicationContext log INFO: cgi: runCGI (stderr):syntax error at C:\Tomcat 6.0\webapps\ROOT\cgi-bin\ test.cgi 第 2 行,靠近 ")
    • 如果是 Python 2.x 则需要 print "foobar", no ( or )