Dateiname speichern oder auslesen[?]

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
lackschuh
User
Beiträge: 281
Registriert: Dienstag 8. Mai 2012, 13:40

Hallo

Hab einen RPI mit Kamera und PIR. Es soll nun ein Foto aufgenommen werden und anschliessend das aktuelle Foto per Mail versandt werden:

Code: Alles auswählen

pfad_bilder = '/home/pi/camera/bilder/'

def bild_aufnehmen():
    global bild # eventuell für die Funktion send_mail()
    with picamera.PiCamera() as camera:
        camera.resolution = (1024, 768)
        camera.start_preview()
        # Camera warm-up time
        time.sleep(2)
        camera.capture(pfad_bilder + '%s.jpg' % time.strftime("%Y-%M-%H-%M-%S", time.gmtime()))
        print 'Bild aufgenommen'

def send_mail(to, subject, text, files=[]):
    ....

def main():
    bild_aufnehmen()
    send_mail(["meine@mail.com"], u"PI Cam augelöst!", "Bild ist im Anhang", bild])
Das Aufnehmen etc geht alles. Auch das Versenden der Mails, aber nur wenn ich den Dateipfad manuell eintrage zB /home/pi/Python/Camera/bilder/2014-46-18-46-42.jpg.

Meine Frage ist nun, wie ich am einfachsten den Dateinamen des gemachten Bildes der Funktion send_mail() übergebe. Ich habe mal mit dem Modul glob.glob mit eine Liste aus den Elementen des Ordners bilder generiert und dann halt das letzte Element [-1] genommen. Dies geht auch, aber ich denke, dass ist der falsche Weg. Irgendwie steh ich gerade auch dem Schlauch :roll:
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Lass `bild_aufnehmen` den Pfad zurueckgeben und uebergib ihn als Parameter an `send_mail`. `global bild` solltest du dagegen schnell wieder loeschen.
lackschuh
User
Beiträge: 281
Registriert: Dienstag 8. Mai 2012, 13:40

cofi hat geschrieben:Lass `bild_aufnehmen` den Pfad zurueckgeben und uebergib ihn als Parameter an `send_mail`. `global bild` solltest du dagegen schnell wieder loeschen.
Hallo

Verzeih mir meine Dämlichkeit, aber wenn ich mit 'global bild' arbeite, dann geht alles.

Code: Alles auswählen

def bild_aufnehmen():
    global blid
    with picamera.PiCamera() as camera:
        camera.resolution = (1024, 768)
        camera.start_preview()
        # Camera warm-up time
        time.sleep(2)
        blid = os.path.join(pfad_bilder, '%s.jpg' % time.strftime("%Y-%M-%H-%M-%S", time.gmtime()))
        camera.capture(blid)
        #return bild

def main():
    bild_aufnehmen()
    send_mail( ["my@mail.com"],
                     u"PI Cam augelöst!",
                     "Bild ist im Anhang",
                      [bild])
Ich hab schon paar mal hier gelesen, dass man die Finger von globalen Variablen lassen soll, aber wie kriege ich sonst den Wert von 'bild' in die main-Funktion?

So ungefähr?: :K

Code: Alles auswählen

def bild_aufnehmen():
    ....
    ....
    return bild

bild = bild_aufnehmen()
print bild
Darii
User
Beiträge: 1177
Registriert: Donnerstag 29. November 2007, 17:02

Ja genau so, was funktioniert denn nicht (verschrieben blid vs bild)?
Antworten