Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 为什么我会得到错误,KeyError:';wsgi.input';?_Python_Mod Wsgi - Fatal编程技术网

Python 为什么我会得到错误,KeyError:';wsgi.input';?

Python 为什么我会得到错误,KeyError:';wsgi.input';?,python,mod-wsgi,Python,Mod Wsgi,我正在使用WSGI并尝试访问get/post数据,使用以下代码: import os import cgi from traceback import format_exception from sys import exc_info def application(environ, start_response): try: f = cgi.FieldStorage(fp=os.environ['wsgi.input'], environ=os.environ)

我正在使用WSGI并尝试访问get/post数据,使用以下代码:

import os
import cgi
from traceback import format_exception
from sys import exc_info

def application(environ, start_response):

    try:
        f = cgi.FieldStorage(fp=os.environ['wsgi.input'], environ=os.environ)
        output = 'Test: %s' % f['test'].value
    except:
        output = ''.join(format_exception(*exc_info()))

    status = '200 OK'
    response_headers = [('Content-type', 'text/plain'),
                        ('Content-Length', str(len(output)))]
    start_response(status, response_headers)

    return [output]
但是,我得到以下错误:

Traceback (most recent call last):
  File "/srv/www/vm/custom/gettest.wsgi", line 9, in application
    f = cgi.FieldStorage(fp=os.environ['wsgi.input'], environ=os.environ)
  File "/usr/lib64/python2.4/UserDict.py", line 17, in __getitem__
    def __getitem__(self, key): return self.data[key]
KeyError: 'wsgi.input'
是因为我的版本中不存在wsgi.input吗?

您误用了

请创建一个显示此错误的最小(“hello world”)函数,以便我们可以对您的代码进行注释。[不要发布您的整个应用程序,它可能太大、太笨拙,我们无法对此发表评论。]

os.environ
不是您应该使用的。WSGI用一个丰富的环境来代替它。WSGI应用程序有两个参数:一个是包含
'WSGI.input'
的字典


在你的代码中

def application(environ, start_response):

    try:
        f = cgi.FieldStorage(fp=os.environ['wsgi.input'], environ=os.environ)
根据WSGIAPI规范(),不要使用
os.environ
。使用应用程序的第一个位置参数
environ

environ参数是一个字典 对象,包含CGI样式 环境变量。这个物体 必须是内置Python字典 (不是子类、UserDict或其他 字典仿真)和 允许应用程序修改 不管它想要什么样的词典。这个 词典还必须包括某些 WSGI所需变量(如中所述 后面的章节),也可能包括 特定于服务器的扩展变量, 按照约定命名的 下文将对其进行说明

你误用了这个词

请创建一个显示此错误的最小(“hello world”)函数,以便我们可以对您的代码进行注释。[不要发布您的整个应用程序,它可能太大、太笨拙,我们无法对此发表评论。]

os.environ
不是您应该使用的。WSGI用一个丰富的环境来代替它。WSGI应用程序有两个参数:一个是包含
'WSGI.input'
的字典


在你的代码中

def application(environ, start_response):

    try:
        f = cgi.FieldStorage(fp=os.environ['wsgi.input'], environ=os.environ)
根据WSGIAPI规范(),不要使用
os.environ
。使用应用程序的第一个位置参数
environ

environ参数是一个字典 对象,包含CGI样式 环境变量。这个物体 必须是内置Python字典 (不是子类、UserDict或其他 字典仿真)和 允许应用程序修改 不管它想要什么样的词典。这个 词典还必须包括某些 WSGI所需变量(如中所述 后面的章节),也可能包括 特定于服务器的扩展变量, 按照约定命名的 下文将对其进行说明


粘贴了一些更详细的示例代码。请让我知道我应该改变它。啊,我没有看到环境是我的方法的一个论点。我认为这是一个愚蠢的错误。粘贴了一些更详细的示例代码。请让我知道我应该改变它。啊,我没有看到环境是我的方法的一个论点。我认为这是个愚蠢的错误。