鎌倉 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 を付けて、点灯・消灯をさせるプログラムを書くことです。