ここで見つけたコードを使用して単純なデーモンを実装しているので、停止する直前にデーモンにアクションを実行させる方法があるかどうか疑問に思っています。私のスクリプトでは、外部デバイスへのシリアル接続を使用しているので、デーモンをシャットダウンする前に、デバイスをクリーンに閉じたいと考えています。
App()クラスのinitループ中に、すべての準備と準備セットアップを行っています。次に、run関数は、シリアル接続の開始、最初のいくつかの値の破棄、およびメインループの開始(シリアル接続から値を取得し、それらを外部サーバーに保存するだけ)を処理します。
ここで、シリアル接続を閉じたり、ログファイルに送信されたデータの概要を取得したりするなど、終了直前のアクションを追加します。
それを行う簡単な方法はありますか?(またはそれにとって難しいものでさえ)。
記録のために、私はデーモンを作成するこの方法を使用することも考えました。これは、私がやろうとしていることを行うためのより簡単な方法である可能性があります。
今のところ私のコードは次のようになります。
#standard libraries from python
import logging, sys, time
#3rd party lib
import serial, requests
from daemon import runner
class App():
def __init__(self):
#some initialize also including the ones from the example
serialport = '/dev/ttyACM0'
def run(self):
#Serial start
ser = serial.Serial()
ser.port = serialport
ser.open()
#First values discarded
for i in range(30):
ser.readline()[:-1]
#Yes, that's ugly!
i = 1
#Main loop
while True:
# Serial retrieve
values = ser.readline()
r = requests.get(url, params=values)
logger.info("%s values sent", str(i))
values = ''
i += 1
time.sleep(3)
app = App()
#daemon starting stuff from example
助けてくれてありがとう!