CGI未执行Python - 500内部服务器错误

3 投票
2 回答
3408 浏览
提问于 2025-04-16 09:27

我有几个Python脚本想要运行,以下是我的配置: Ubuntu 10.04,Apache2,Python 2.6,已经安装了mod_python和mod_wsgi。

我按照以下网站的说明进行了操作:

http://bytes.com/topic/python/answers/474462-apache-python-ubuntu

http://apache.active-venture.com/cgi-configure.html

http://modpython.org/live/current/doc-html/inst-testing.html

http://code.google.com/p/modwsgi/wiki/QuickInstallationGuide

http://wiki.apache.org/httpd/DistrosDefaultLayout

在sites-available中的默认文件:

<VirtualHost *:80>
    ServerAdmin webmaster@localhost

    DocumentRoot /var/www
    <Directory />
            Options FollowSymLinks
            AllowOverride None
    </Directory>

    <Directory /var/www/>
            Options Indexes FollowSymLinks MultiViews
            AllowOverride None
            Order allow,deny
            allow from all
    </Directory>

    ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
    <Directory "/usr/lib/cgi-bin">
            AddHandler mod_python .py
            AddHandler cgi-script .cgi py
            AllowOverride None
            Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
            Order allow,deny
            Allow from all
    </Directory>

我遇到了500内部服务器错误。 我还把文件的权限改成了755。

这些Python文件只是打印一些文本,应该显示在页面上。 我该怎么做呢? 谢谢。

[编辑]:更新,问题和py文件中的错误有关 下面是错误日志。

Traceback (most recent call last):
  File "/usr/lib/cgi-bin/amissa2.py", line 80, in <module>
    zoom_factor = int(parms.getfirst('zoom')) * int(parms.getfirst('zsize'))
TypeError: int() argument must be a string or a number, not 'NoneType'

看起来是在这里发生了从None到int的转换错误:

zoom_factor = int(parms.getfirst('zoom')) * int(parms.getfirst('zsize'))

有没有什么提示可以告诉我如何进行这样的转换呢?

2 个回答

1

你没有加载wsgi模块。

LoadModule wsgi_module modules/mod_wsgi.so

另外,你只需要安装mod_wsgi或者mod_python中的一个就可以了。除非你有特别的需求,不然不需要同时安装两个。

1

如果parms.getfirst('zoom')或parms.getfirst('zsize')返回的是None,那可能是你在URL中没有提供这些参数(我也不知道这些参数是什么,只是在猜)。你需要定义一下当这些参数缺失时你希望程序怎么处理(比如说,缺失了是代表“0”倍放大,还是因为你在做乘法,所以“1”更合理?)。

然后,你可以创建一个自己的转换函数,让它知道如何把None转换成整数(这要根据你之前定义的处理方式),并在需要的时候调用这个函数,而不是直接用int()。

def convert(value):
   if value is None:
      return 0 # or 1, or whatever
   else:
      return int(value)

撰写回答