使用wsgi(并且只有wsgiref模块)将shell中写入的每个字符串托管到ip url的程序

时间:2012-05-01 15:32:39

标签: python hosting cgi wsgi

我想用wsgi创建一个小程序,允许我在shell中键入字符串并将其输出到我的ip url上。

目前我有wsgi_app.py

#!/usr/bin/env python
from wsgiref.simple_server import make_server

def application(environ, start_response):
    start_response('200 OK', [('Content-Type', 'text/plain')])
    return [cont]

while True:
    cont = raw_input(">>>")
    server = make_server('0.0.0.0', 8080, application)
    server.serve_forever()

这会在我的shell中输出>>>,然后我可以输入一个字符串。如果我去192.xxx.x.xx:8080我可以看到我写的东西。问题是这只能工作一次,我希望raw_input()循环,这样我就可以键入新字符串,而不是刷新网页并查看新内容。我的猜测是serve_forever()已经是一个无限循环,这确保了我的while循环的主体永远不会到达终点。有没有另一种方法只使用wsgiref模块在每次输入后继续输出>>>并在我的网页上托管我的输入(换句话说,用wsgiref中的其他函数结束我的while循环体)?

额外的问题:是否有可能使我的网页自动刷新,所以我不必每次都在我的浏览器中手动刷新以查看我写的新字符串?


改进版,1.1版

使用server.handle_request()代替server.serve_forever(),这个宝宝终于可以循环了。此版本打印出您在shell中键入的新输入。

#!/usr/bin/env python
from wsgiref.simple_server import make_server

def application(environ, start_response):
    start_response('200 OK', [('Content-Type', 'text/plain')])
    return [cont]

i = 1

while True:
    cont = raw_input(">>> ")
    if i == 1:
        server = make_server('0.0.0.0', 8080, application)
    server.handle_request()
    i += 1

然而,

版本1.1不显示先前输入的文本。所以现在在版本1.2 中我使用一个列表来存储以前输入的文本。 不幸的是,当我第二次输入文本时,此代码不显示文本。有谁知道为什么?

#!/usr/bin/env python
from wsgiref.simple_server import make_server

def application(environ, start_response):
    start_response('200 OK', [('Content-Type', 'text/plain')])
    return [str(cont())]

def cont():
    for k in l:
        return k + '\n'

i = 1
l = []

while True:
    l.append(raw_input(">>> "))
    if i == 1:
        server = make_server('0.0.0.0', 8080, application)
    server.handle_request()
    i += 1

0 个答案:

没有答案