如何在启动时运行的 python 脚本中构建退出?

如何在启动时运行的 python 脚本中构建退出?

我使用运行 Raspbian 的 rPi Zero 进行延时摄影。启动时会调用 shell 脚本,然后启动 python 脚本。

python 脚本拍摄 x 张图片,然后将其自身移动到另一个文件夹。这样我就可以在现场使用 rPi 的电池电源、断电以及下次从家里启动时,shell 找不到 .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)

笔记:我没有测试这个,所以用作模板。

相关内容