起動時に実行されるPythonスクリプトで終了をどのように作成できますか?

起動時に実行されるPythonスクリプトで終了をどのように作成できますか?

私は低速撮影写真のためにRaspbianを実行するrPi Zeroを使用しました。起動時にシェルスクリプトが呼び出され、次にPythonスクリプトが起動します。

Pythonスクリプトはx枚の写真を撮ってから別のフォルダに移動します。これにより、現場でバッテリ電源としてrPiを使用でき、電源が切れ、次回自宅で起動するとシェルが.pyを見つけることができず、デスクトップから起動します。次に、必要なファイルをコピーし、piから削除し、再び見つかったフォルダにスクリプトを再度移動し、電源を切り、次の作業の準備をします。

私の質問は、ライブスクリプトの進行中にバッテリーが3/4程度放電した場合でも、自宅でバッテリーを接続して終了してイメージを回復できるように、プロセスにコンセントを構築できるかどうかということです。

これは私のスクリプトです。

ランチャー.sh:

cd /
cd home/pi/bbt
sudo python bbt.py
cd /

bbt.py:

import shutil
import os
import time

FRAMES = 1000
TIMEBETWEEN = 10

frameCount = 0
while frameCount < FRAMES:
    imageNumber = str(frameCount).zfill(7)
    os.system("raspistill -o firstTLimage%s.jpg"%(imageNumber))
    frameCount += 1
    time.sleep(TIMEBETWEEN - 6)

shutil.move('/home/pi/bbt/bbt.py' , '/home/pi/bbt/TLbackup/bbt.py

ベストアンサー1

私はこれをしないことをお勧めします。スタートアップコードがファイルを見つけることができるかどうかなどの副作用を使用すると、デバッグがより困難になり、エラー状態(バッテリエラー)などの問題を処理することがより困難になります。スクリプトは興味のある変数を追跡し、それに応じて動作する必要があります。

これは、イメージがすでに存在することを確認し、存在しない場合にのみイメージをインポートするスクリプトを再構築したものです。また、ショット間の一貫したタイミングを確保するメカニズムを追加します。

import time
import os

FRAMES = 1000
TIMEBETWEEN = 10
FILENAME = 'firstTLimage % 07d.jpg'

if not os.path.exists(FILENAME % 0):
    next_time = time.time()
    for frame_count in range(FRAMES):
        time.sleep(max(0, next_time - time.time()))
        next_time += TIMEBETWEEN
        os.system("raspistill -o " + FILENAME % frame_count)

メモ:テストしてみませんでしたので、テンプレートとして使用してください。

おすすめ記事