2

ここで見つけたコードを使用して単純なデーモンを実装しているので、停止する直前にデーモンにアクションを実行させる方法があるかどうか疑問に思っています。私のスクリプトでは、外部デバイスへのシリアル接続を使用しているので、デーモンをシャットダウンする前に、デバイスをクリーンに閉じたいと考えています。

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

助けてくれてありがとう!

4

1 に答える 1

3

これは、stdlibatexitで説明されています。オブジェクトが削除される前にコードを実行するためのより詳細なレベルでは、 delメソッドを実装できます。

于 2013-02-25T18:25:28.413 に答える