我想用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