Como eu construo uma saída para o script python executado na inicialização?

1

Eu uso um rPi Zero rodando o Raspbian para fotografia com lapso de tempo. Na inicialização, é chamado um script de shell que inicia um script python. O shell script e o script python são os primeiros programas que eu já escrevi. Não tenho experiência em programação, por favor, tenha paciência comigo se eu não entender imediatamente sua solução.

O script python pega um número x de imagens e depois se move para outra pasta. Isto é para que eu possa usar o rPi no campo com energia da bateria, desligar e na próxima inicialização de casa, o shell não encontra o .py e, portanto, inicializa na área de trabalho. Eu então copio os arquivos que preciso, excluo-os do pi e movo o script de volta para a pasta onde ele pode ser encontrado novamente e desligue, preparando para o próximo uso.

Minha pergunta é; posso construir uma saída para esse processo, então se minha bateria morrer 3/4 do caminho no script no campo, ainda posso ligar em casa e matá-la para salvar as imagens.

Aqui estão meus roteiros (tenho certeza que eles são crus e bagunçados, mas eu não recebi ajuda de ninguém ainda orgulhoso):

launcher.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
    
por J. Good 11.03.2017 / 19:44

1 resposta

1

Eu sugiro que você não faça isso dessa maneira. Usar efeitos colaterais, como se um arquivo pode ser encontrado pelo código de inicialização, dificulta a depuração, e é difícil lidar com coisas como condições de erro (falha de bateria). Seu script deve rastrear as variáveis com as quais está preocupado e, em seguida, agir de acordo.

Aqui está uma reformulação do seu script que procura ver se uma imagem já está presente, e somente se a imagem não estiver lá, ela vai tirar fotos. Também adiciona um mecanismo para garantir que o tempo entre os disparos seja consistente:

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)

NOTA: Eu não testei isso, então use como modelo.

    
por 11.03.2017 / 20:19