在 IIS 6.1 中使用 Python/CGI 时出现“错误文件描述符”错误

在 IIS 6.1 中使用 Python/CGI 时出现“错误文件描述符”错误

背景

我曾尝试(重点强调“尝试”)通过 IIS(6.1,Windows Server 2008 R1)设置一个应用程序,该应用程序通过 Python 脚本路由所有请求。最终目标是在服务器上创建一个非常轻量级的 API。

基本上,我采取了以下步骤:

  1. 为 Windows 添加了 CGI 功能
  2. 默认网站
  3. *添加了接受并运行的处理程序映射c:\Python27\python.exe -u "c:\inetpub\wwwroot\testapi\cgiadapter.py"
  4. 将应用程序的虚拟目录设置为testapi
  5. 将应用程序的物理路径设置为c:\inetpub\wwwroot\testapi

做一个基本的测试,以下脚本已经过测试并且可以运行:

import cgi, cgitb

# Detailed error logging to screen
cgitb.enable()

# Output basic response
print 'content-type:text/plain'
print
print 'Hello World'

然后,我尝试更新脚本以读取来自标准输入

import cgi, cgitb

# Detailed error logging to screen
cgitb.enable()

# Attempt to read the raw request from CGI
import sys
request = sys.stdin.read()

# Output basic response
print 'content-type:text/plain'
print
print 'Hello World'

突然,我收到以下错误:<type 'exceptions.IOError'>: [Errno 9] Bad file descriptor在包含的行上stdin.read()

问题

为什么stdin被认为是坏文件?

我在 IIS 中配置了错误的东西吗?或者这是 IIS 的限制?或者,请求通过 stdin 传递是一个错误的假设?

谢谢!

答案1

我遇到了同样的问题,发现在 IIS 下,您需要使用 CONTENT_LENGTH 环境变量来限制从 stdin 读取的数据量。以下是我添加到代码中以使其在 IIS7 上运行的内容:

try:
    import os
    request = sys.stdin.read(int(os.environ['CONTENT_LENGTH']))
except:
    request = ''

答案2

有点晚了...但我认为stdin(fd 0)已经关闭了。

相关内容