1

POSTリクエストを介してGPS座標を受信し、それらをWebページに表示する単純なWebサーバーを構築しようとしています。携帯電話から座標を正しく受信し、サーバーウィンドウに出力するので、変数「lat」と「lon」が実際の座標で更新されている必要があることを理解していますが、ブラウザを開くと「テスト」しか表示されませんtest"..初心者の質問で申し訳ありませんが、私はPythonに非常に慣れていないため、クラスMyHandlerが変数にアクセスできない理由を理解できません..これまでの私のコードは次のとおりです。

PORT = 5050
lat="test"
lon="test"
speed="test"


def serv_responseGET(s):
    s.send_response(200)
    s.send_header("Content-type", "text/html")
    s.end_headers()
    s.wfile.write(lat, lon)

def serv_responsePOST(s):       
    s.send_response(200)
    s.send_header("Content-type", "text/html")
    s.end_headers()
    s.wfile.write(' ');

class MyHandler(BaseHTTPServer.BaseHTTPRequestHandler):
    def do_POST(s):
        print s.path
        length = int(s.headers['Content-Length'])
        post_data = urlparse.parse_qs(s.rfile.read(length).decode('utf-8'))
        for key, value in post_data.iteritems():
            if key=="lat":
                lat=''.join(value)
            if key=="lon":
                lon=''.join(value)
            if key=="speed":
                speed=''.join(value)
        print datetime.datetime.now()
        print "lat=", lat 
        print "lon=", lon
        print "spd=", speed
        serv_responsePOST(s)


    def do_GET(s):
        print s.path
        serv_responseGET(s)


if __name__ == '__main__':
    server_class = BaseHTTPServer.HTTPServer
    httpd = server_class(('', PORT), MyHandler)
    print time.asctime(), "Server Starts - %s:%s" % ('', PORT)
    httpd.serve_forever()

これは、携帯電話からの POST 後に Python ウィンドウに表示されるものです。

/
2014-10-25 16:23:20.598733
lat= 37.971649
lon= 23.727053
spd= 0.0
192.168.2.50 - - [25/Oct/2014 16:23:20] "POST / HTTP/1.1" 200 -
4

1 に答える 1

0

Python では、プロシージャ内の変数に代入すると、ローカル変数を作成するつもりであると想定され、グローバル変数は無視されます。グローバル変数に割り当てるには、最初にそれらを宣言する必要があります。そのため、行を追加するだけです

global lat, lon, speed

あなたのdo_POSTの開始まで、それが修正されると信じています。

于 2014-10-25T14:58:47.827 に答える