鎌倉 Python もくもく会 #3 に参加

Posted on Sat 23 February 2019 in misc

鎌倉 Python もくもく会 #3 に参加しました。

雑なコードになってしまいました。サーバが持っている変数を PUT メソッドで更新するということを試しました。

サーバが持っている変数 status を、クライアントが読み取って、on と off を書き換えるようサーバにリクエストするプログラムです。サーバ側では変数の値をレスポンスボディに入れて返すようにしました。クライアント側では、レスポンスのステータスコードとボディを print するようにしました。

サーバのコードです。

#!/usr/bin/python3

from bottle import run, get, post, put, delete


@get('/status')
def read_status():
    return status


@put('/status/<status_url>')
def update_status(status_url):
    global status
    status = status_url
    return status


if __name__ == '__main__':
    status = 'off'
    run(host='localhost', port=8080)

クライアントのコードです。

#!/usr/bin/python3

import sys
import time

import requests


def get():
    return requests.get('http://localhost:8080/status')


def put(status):
    return requests.put('http://localhost:8080/status/' + status)


if __name__ == '__main__':
    if sys.argv[1:] and sys.argv[1] == 'get':
        response = get()
        print(response.status_code, response.text)
    elif sys.argv[1:] and sys.argv[1] == 'put':
        response = put(sys.argv[2])
        print(response.status_code, response.text)
    elif not sys.argv[1:]:
        while True:
            status = get().text

            if status == 'off':
                response = put('on')
            elif status == 'on':
                response = put('off')
            else:
                continue

            print(response.status_code, response.text)
            time.sleep(0.5)

URL が雑だなと思います。/status/on ではなくクエリにして ?status=on という風にしたほうが良いのかなという気はしています。実際に Raspberry Pi に付けた LED を光らせるときには、もう少し調べて実装しましょう。

2 時間でできるかなと思いましたが、今日のところの目標、Bottle と Requests でサーバとクライアントをつくってみるところまでは達成できて良かったと思います。次の目標は Raspberry Pi に LED を付けて、点灯・消灯をさせるプログラムを書くことです。