1

シェルに文字列を入力してIPURLに出力できるwsgiを使用した小さなプログラムを作成したいと思います。

現在私はこれを持っています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()

>>>これはシェルに出力され、文字列を入力できます。行くと192.xxx.x.xx:8080自分が書いたものが見えます。問題は、これが1回だけ機能するraw_input()ことです。ウェブページを更新して新しいコンテンツを表示するよりも、ループして新しい文字列を入力できるようにしたいのです。私の推測では、それserve_forever()はすでに無限ループであり、whileループの本体が決して終了しないようにします。wsgirefモジュールのみを使用して>>>、各入力の後に出力を継続し、Webページで入力をホストする(つまり、wsgirefの他の関数でwhileループの本体を終了する)別の方法はありますか?

追加の質問:ウェブページを自動更新することは可能ですか?そのため、作成した新しい文字列を表示するために毎回ブラウザで手動で更新する必要はありませんか?


改善されたバージョン1.1

server.handle_request()の代わりに使用するとserver.serve_forever()、この赤ちゃんは最終的にループすることができます。このバージョンでは、シェルに入力した新しい入力が出力されます。

#!/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では、リストを使用して以前に入力したテキストを保存しています。残念ながら、このコードは、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