Beim Start des Raspberry Pi ein Python Skript direkt ausführen

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
  • Hallo alle miteinander,

    ich möchte bei dem Start des RPi automatisch ein Skript ausführen lassen. Ich habe in einem anderen Thema hier gelesen, dass man die Datei /etc/rc.local ändern soll. Daraufhin wollte ich das probieren aber ich finde bei mir die Datei nicht. :-| Da das andere Thema leider schon geschlossen wurde, konnte ich da nicht mehr nachfragen. Woran liegt es, dass ich die Datei nicht finden kann oder das es die Datei nicht bei mir vielleicht nicht gibt??
    Auf meinem RPi läuft Wheezy.

    Ich danke schon mal für jede Antwort. :)

    Gruß Kellermann66

  • Beim Start des Raspberry Pi ein Python Skript direkt ausführen? Schau mal ob du hier fündig wirst!

  • Hallo Kellermann66,

    die "/etc/rc.local" ist eine Systemdatei und kann nur vom Benutzer root editiert werden. Es kann durchaus sein, dass der File Manager aufgrund der fehlenden Berechtigungen die Datei dann gar nicht anzeigt. Am Besten öffnest du mal ein Terminal und rufst folgenden Befehl auf.

    Code
    sudo nano /etc/rc.local

    Damit wird die Datei im Texteditor nano geöffnet und du kannst Änderungen daran vornehmen und abspeichern. Lies dir aber vorher noch das oben genannte Tutorial durch. Es gibt ein paar Kleinigkeiten die du beachten solltest.

    Gruß Georg

  • Das ist jetzt aber erst ein Test Programm. ;)
    Hier ist aber der Hauptteil:

    # Dauerschleife
    while True:
    # Kanäle einlesen und in Variablen speichern
    klim_1 = GPIO.input(7)
    klim=2 = GPIO.input(11)

    # Zustand wenn alles in Ordnung ist
    if klim_1 == 1 and klim_2 == 1:
    GPIO.output(16, True)
    os.system('clear')
    print("Es ist alles OK!")

    # Abfrage Klimaanlage 1
    if klim_1 == 0:
    os.system('clear')
    print("Bei der Klimaanlage 1 wurde ein Fehler festgestelt!")
    GPIO.output(22, True)
    GPIO.output(16, False)
    sleep(5)
    GPIO.output(22, False)

    # Abfrage Klimaanlage 2
    if klim_2 == 0:
    os.system('clear')
    print("Bei der Klimaanlage 2 wurde ein Fehler festgestellt!")
    GPIO.output(22, True)
    GPIO.output(16, False)
    sleep(5)
    GPIO.output(22, False)

    PS: Hoffe es ist nicht all zu schlecht. :D

    Einmal editiert, zuletzt von Kellermann66 (15. August 2013 um 14:36)

    • Offizieller Beitrag

    Jeder fängt mal an ;), solange du es verstehst und es lesen kannst ist alles io.


    Es gibt noch ein python logging modul, was auch sehr mächtig ist, für dich eventuell etwas oversized ;)

    Ich hab jetzt nur mal das erste If abgebildet, das Prinzip sollte erkenbar sein ;)

    Du kannst natürlich noch das logfile /var/log/ ändern und nen vernünftigen Namen vergeben ;)
    Dann machst du einfach ein Terminal auf und kannst mittels

    Code
    tail -f Pfad/Datei


    den Scriptverlauf anzeigen lassen

  • Hallo Kellermann66,

    du musst nicht für jeden Print-Aufruf eine neue Log-Datei erstellen oder eine vorhandene Log-Datei erneut öffnen. Du musst allerdings sicherstellen, dass wenn du etwas in die Logdatei schreiben willst diese auf geöffnet ist. Es würde also ausreichen, wenn du die Log-Datei am Anfang deines Skriptes öffnest und dann kurz vom Beenden des Skriptes wieder schließt.

    Gruß Georg

  • Hallo dbv,

    ehrlich gesagt habe ich mir das Skript gar nicht so genau angesehen. Eine alternative Lösung wäre eine eigene Funktion zu schreiben welche sich um das ganze Logging kümmert. Dann hat man eine eigene Funktion der man einfach einen String übergibt. Diese kann sich dann um die Formatierung (z.B. noch einen Timestamp voranstellen) kümmern und das ganze in die Logdatei schreiben. Dadurch ist das ganze Handling der Logdatei in einer Funktion untergebracht und man muss nur noch diese eine Funktion aufrufen.

    Gruß Georg

    • Offizieller Beitrag

    Die Funktion würde dann so aussehen:

    Code
    def logmich(loggingtext):
      file = open("/var/log/logtest.log","a")
      file.write("%s", % loggingtext)
      file.close

    Aufruf dann über:

    Code
    logmich("Alles ist ok")

    Den Zeitstempel hab ich mir jetzt gespart, tippt sich doof auf dem Handy ;)

  • Hallo dbv,

    eigentlich war das ganze als Anregung für den Thread-Ersteller gedacht ;)
    In deinem Code steckt aber ein kleiner Typo. In der folgenden Zeile muss das Komma entfernt werden.

    Code
    file.write("%s", % loggingtext)

    Mit Timestamp könnte das ganze wie folgt aussehen.

    Gruß Georg

    Einmal editiert, zuletzt von boandlkramer (16. August 2013 um 17:55)

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!