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