시작 시 실행되는 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)

노트:테스트해보지는 않았으므로 템플릿으로 사용하세요.

관련 정보