Когда это sys.stdin нет в Python?


Я пытаюсь запустить Flask как простое приложение CGI через IIS.

У меня есть следующий код:

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

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

CGIHandler().run(app)

Я запускаю Python 3.3 на Windows. Я получаю следующую ошибку:

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

Я добавил некоторый код регистрации, и оказалось, что sys.stdin - это None.

Python добавляется в IIS в качестве обработчика CGI следующим образом:

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

Итак, почему sys.stdin нет, и как я могу это исправить?

EDIT

Похоже на sys.stdin отсутствует, потому что файл дескриптор недопустим .

1 3

1 ответ:

Интересно. Ты сам ответил на половину своего вопроса. Вторая половина ("как это исправить") достаточно проста, просто откройте какую-нибудь подходящую вещь (os.devnull - очевидная) и установите sys.стдин указал туда. Вам нужно будет сделать 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 ...

Должен сделать трюк.