Форум сайта python.su
Привет!
Меня заинтересовал функционал модуля wsgiref.handlers, и решил попробовать использовать CGIHandler
# -*- coding: utf-8 -*-
import wsgiref.handlers
import os
import sys
def application(environ, start_response):
out = sys.stdout;
environ = dict(os.environ.items())
start_response('200 OK', [('Content-Type', 'text/html')])
return '';
#print('test');
wsgiref.handlers.CGIHandler().run(application)
Офлайн
boomПривет! Вот пример:
Дайте пожалуйста какой-нибудь пример, с выводом данных из sys.stdout…
# -*- coding: cp1251 -*-
from wsgiref.handlers import CGIHandler
import sys
class WritableObject:
'''Класс для переопределения методов write и flush'''
def __init__(self):
self.lines = []
def write(self, s):
if len(s.strip()) > 0:
self.lines.append(s)
def flush(self):
pass
def readlines(self):
return self.lines
def __del__(self):
self.lines = None
class HookedStdout:
'''Класс для захвата стандартного вывода'''
def __init__(self):
sys.stdout = sys.stderr = WritableObject()
def __del__(self):
sys.stdout = sys.__stdout__
sys.stderr = sys.__stderr__
class MyCGIHandler(CGIHandler):
'''Переопределяем CGIHandler, чтобы захватить "евоный" стандартный вывод'''
def __init__(self):
self.stdout = HookedStdout()
CGIHandler.__init__(self)
def __enter__(self):
return self
def __exit__(self, type, value, traceback):
self.__del__()
def readlines(self):
return self.stdout.readlines()
def __del__(self):
self.stdout = None
def application(environ, start_response):
'''WSGI application'''
start_response('200 OK', [('Content-Type', 'text/html')])
return ['<HTML><BODY><P>Hello, World !!!</P></BODY></HTML>'];
'''Начало программы'''
if __name__ == '__main__':
with MyCGIHandler() as cgi:
cgi.run(application)
for i, line in enumerate(cgi.readlines()):
print 'Line %d: "%s"' % (i, line.strip().replace('\r\n', ';'))
Line 0: "Status: 200 OK"
Line 1: "Content-Type: text/html;Content-Length: 49"
Line 2: "<HTML><BODY><P>Hello, World !!!</P></BODY></HTML>"
Офлайн
О! Спасибо! То что так долго искал
Офлайн