Way*_*ner 6 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)
Run Code Online (Sandbox Code Playgroud)
我在 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' ".
Run Code Online (Sandbox Code Playgroud)
我添加了一些日志代码,事实证明sys.stdin是None.
Python 作为 CGI 处理程序添加到 IIS 中,如下所示:
Request path: *.py
Executable: C:\Windows\py.exe -3 %s %s
Run Code Online (Sandbox Code Playgroud)
那么,为什么 sys.stdin None 以及如何修复它?
编辑
看起来 sys.stdin 是 None 因为文件描述符无效。
有趣的。你已经回答了你自己问题的一半了。另一半(“我该如何修复它”)很简单,只需打开一些合适的东西(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 ...
Run Code Online (Sandbox Code Playgroud)
应该可以解决问题。
| 归档时间: |
|
| 查看次数: |
2112 次 |
| 最近记录: |