1

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

0 回答 0