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