什么时候Python中的sys.stdin是无?

时间:2013-07-03 21:51:55

标签: python iis cgi flask python-3.3

我正在尝试通过IIS将Flask作为一个简单的CGI应用程序运行。

我有以下代码:

from wsgiref.handlers import CGIHandler
from flask import Flask
app = Flask(__name__)

@app.route('/')
def main():
    return 'Woo woo!'

CGIHandler().run(app)

我在Windows上运行Python 3.3。我收到以下错误:

File "C:\Python33\lib\wsgiref\handlers.py", 
line 509, in __init__(self, sys.stdin.buffer, sys.stdout.buffer, sys.stderr, )
AttributeError: 'NoneType' object has no attribute 'buffer' ".

我添加了一些日志记录代码,结果sys.stdinNone

Python作为CGI处理程序添加到IIS中,如下所示:

Request path: *.py
Executable: C:\Windows\py.exe -3 %s %s

那么,为什么sys.stdin为None,我该如何修复呢?

修改

看起来sys.stdin是None,因为file descriptor is invalid

1 个答案:

答案 0 :(得分:3)

有趣。你已经回答了一半自己的问题。另一半(“我该如何修复它”)很容易,只需打开一些合适的东西(os.devnull是显而易见的)并设置sys.stdin指向那里。你可能也需要做sys.stdout和sys.stderr,大概是这样的:

import os, sys
for _name in ('stdin', 'stdout', 'stderr'):
    if getattr(sys, _name) is None:
        setattr(sys, _name, open(os.devnull, 'r' if _name == 'stdin' else 'w'))
del _name # clean up this module's name space a little (optional)
from wsgiref.handlers ...

应该这样做。