Как загрузить обычный файл, защищенный от записи, созданный сервисом с помощью boto3? - PullRequest
0 голосов
/ 21 мая 2019

У меня запущен скрипт python на моем Raspberry Pi, который

1> начинает делать снимки на каком-то триггере и останавливает его на триггере,

2> связывает изображения в видео, а затем,

3> загружает записанное видео в aws S3.

Мой сценарий работает отлично.Но я хочу, чтобы он работал как служба Linux.Как служба. Она прекрасно работает до захвата изображений и создания видео, после чего происходит сбой службы (время загрузки).

Когда я пытаюсь удалить файлы изображений и видео, созданные моей службой, она сообщает, что это записьЗащищенные обычные файлы.Поэтому я думаю, что по этой причине моему сценарию не разрешено загружать видео, и поэтому мой сервис не работает.Как мне решить эту проблему?

import datetime
from picamera import PiCamera
from time import sleep
import sys
import boto3
import uuid
from subprocess import call
import os
import subprocess
import RPi.GPIO as GPIO

rpi_ID = "1rpi_"
camera = PiCamera()
GPIO.setmode(GPIO.BCM)
pin =  12
GPIO.setup(pin, GPIO.IN)

def uploadReturn(argu):
        print("After upload", argu)

def upload_video_S3():
    s3client = boto3.client('s3')
    bucket_name = '<some_bucket>'
    file_to_upload = name + '.mp4'
    file_name_in_bucket = name+ '.mp4'
    s3client.upload_file(file_to_upload, bucket_name, 
                        file_name_in_bucket, None, uploadReturn)

def naming_file():
    global name
    t = datetime.datetime.now()
    name = rpi_ID + t.strftime('%m_%d_%Y_%H_%M_%S') 

try:
    count = 0
    while True:
        #Trigger is HIGH twice
        if GPIO.input(pin) and count == 1:
            #stop taking snaps on second HIGH
            count = 0
            naming_file()
            #make a video out of snaps
            os.system("ffmpeg -framerate 4 -i img%03d.jpg -c:v 
                     libx264 -profile:v high -r 10 -pix_fmt
                     yuv420p {}.mp4".format(name))
            #upload video
            upload_video_S3()

        elif GPIO.input(pin) and count == 0:
            #On first HIGH trigger, start taking snaps
            sleep(2)
            for filename in enumerate(camera.capture_continuous('/home/pi/upload_s3/img{counter:03d}.jpg')):
                print("Capturing")
                if GPIO.input(pin) == 1:
                    print("Break")
                    break;
                sleep(0.25)
            count = count+1

        else:
            pass

except KeyboardInterrupt:
    print ("Something went wrong")
    GPIO.cleanup()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...