Autostart eines Python Scriptes

  • Hallo,

    ich möchte per Autostart mit bashrc ein Python Skript ausführen. Dieses soll einen LED Streifen sowie einen Magic Mirror ansteuern. Habe in meiner home/pi/.bashrc datei folgendes hinzugefügt:

    Code
    echo Running at boot 
    sudo python /home/pi/Desktop/Autostart.py

    Nach dem reboot steht in der Console:

    Python
    Traceback (most recent call last):
    File "/home/pi/Desktop/Autostart.py", line 7, in <module>
    from rpi_ws281x import *
    ImportError: No module named rpi_ws281x

    Wenn ich jetzt aber den Code so ausführe, also mit sudo python3 Autostart.py im Desktop Ordner, funktioniert es ohne Probleme.

    Hiernoch der Anfang meines Codes:

    Habe auch schon probiert das Modul in einen Test Ordner zu installieren und das Script in den selben Ordner geschmissen. Was mache ich falsch?


    :danke_ATDE:

  • Wenn du nichts am System verbogen has rufst du mit sudo python3 Autostart.py  einmal dein Skript mit python 3 auf und einmal mit python 2 sudo python /home/pi/Desktop/Autostart.py. Ändere das mal.

    Gruß

    Steinardo

    • Offizieller Beitrag

    Btw. Die home/pi/.bashrc ist nicht besonders gut geeignet für einen Autostart, bzw. eher keine gute Idee dafür und sollte nur in absoluten Ausnahmefällen dafür herhalten. Immer wenn Du Dich z.B. per SSH am RPi anmeldest, würde das Skript erneut starten.

    Deshalb würde ich hier eher eine Systemd Service Unit oder ggf. auch einen Cronjob bevorzugen.

  • FloKnoe Anmerkungen zum Python-Quelltext:

    Die She-Bang-Zeile passt nicht zu der Art wie Du das aufrufst, denn die deutet auf ein selbstkompiliertes Python hin.

    ``as`` beim Importieren ist zum Umbenennen gedacht, `GPIO` wird aber gar nicht umbenannt.

    `argparse` und `datetime` werden importiert, aber überhaupt nicht verwendet.

    Sternchen-Importe sind Böse™. Das macht Programme unnötig unübersichtlicher und fehleranfälliger und es besteht die Gefahr von Namenskollisionen.

    Der Kommentar ``# Importieren der System-Schnittstelle`` ist komisch eingerückt und ich sehe in dem Text auch gar keinen Sinn. Worauf bezieht der sich?

    Namen werden in Python klein_mit_unterstrichen geschrieben. Ausnahmen sind Konstanten (KOMPLETT_GROSS) und Klassen (PascalCase).

    Auf Modulebene sollte nur Code stehen der Konstanten, Funktionen, und Klassen definiert. Das Hauptprogramm steht üblicherweise in einer Funktion die `main()` heisst. Wirklich richtig unübersichtlich ist es wenn man auf Modulebene alles mischt, also zwischen Zeilen vom Hauptprogramm Funktionen und Konstanten definiert. Konstanten werden am Anfang des Moduls definiert.

    Am Programmende sollte man unbedingt `GPIO.cleanup()` aufrufen.

    Funktionsnamen und Methodennamen beschreiben üblicherweise die Tätigkeit, welche die Funktion oder Methode durchführt. `farben` ist keine Tätigkeit und wäre ein passender Namen für einen Wert der tatsächlich Farben repräsentiert. Beispielsweise eine Liste mit Farbnamen oder RGB-Werten.

    `os.popen()` sollte man nicht mehr verwenden. Die Dokumentation verweist auf das `subprocess`-Modul. Die beiden `bildschirm*()`-Funktionen machen auch fast das gleiche. Da würde man eher *eine* Funktion schreiben, die ein Argument bekommt ob der Bildschirm ein- oder ausgeschaltet werden soll.

    `wait_ms` ist ein komischer Name wenn der Wert zum Warten in der Schleife dann durch 10.000 geteilt wird und nicht durch 1.000 wie das ms suggeriert. Oder steht das nicht für Millisekunden?

    “Dawn, n.: The time when men of reason go to bed.” — Ambrose Bierce, “The Devil's Dictionary”

  • Hallo

    Ich bin ein kompletter Anfänger :helpnew:

    Ist leider der einzige Artikel der am nährsten an mein Problem herankommt

    ich habe auf dem Raspberry 400 mit Thonny ein Programm geschrieben das zwar im Thonny perfekt läuft aber leider im Terminal (sollte ein Autostart Programm werden) immer den Fehler "ImportError: No module named RPi.GPIO" hervorruft. Ich habe lt. Tutorial alle Updates gemacht da kommt aber immer nur es ist alles auf dem neuesten Stand.

    Terminal Fehler:

    thomas@raspberrypi:~ $ sudo /etc/init.d/MeinAutostart start

    Traceback (most recent call last):

    File "/home/thomas/Vorlagen/Blaulichtmonitor.py", line 4, in <module>

    import RPi.GPIO as GPIO

    ImportError: No module named RPi.GPIO

    kann mir bitte wer weiterhelfen ich bin mit meinem Latein am ende Danke

  • Na gut, jetzt ist ein bissel mehr Zeit! Funktioniert der Aufruf von

    Code
    python3 /home/thomas/Vorlagen/Blaulichtmonitor.py

    im Terminal? Sollte eigentlich! Falls nicht, dann muss das erstmal funktionieren, denn dann wird der Rest auch nichts.

    Zum Autostart: Start-Skripte in /etc/init.d sind veraltet.

    Du hast aktuell zwei sinvolle Möglichkeiten das Skript automatisch starten zu lassen. Entweder Du erstellst eine Systemd Service Unit oder in dem Fall einfach einen Cronjob.

    Für letzteres crontab -e, dann ggf. einen Editor auswählen, am einfachsten ist nano, das müsste die 0 sein, bin da aber nicht 100% sicher.

    Falls Du Dich beim Editor verwählt haben solltest, dann schließ einfach das Fenster und öffne ein neues Terminalfenster und und gib dort sudo update-alternatives --config editor ein, dann kannst Du neu wählen und hier gleich wieder mit crontab -e anfangen. ;)

    Dann in der Crontab ergänzt Du ganz unten folgende zwei Zeilen:

    Code
    @reboot python3 /home/thomas/Vorlagen/Blaulichtmonitor.py
    #

    Dann Tastenkombination Strg+o (das ist der Buchstabe o, nicht die Null!) zum Speichern und dann Strg+x zum Beenden.

    Das sollte es schon gewesen sein. System neu Starten und Testen fehlt natürlich noch.

Jetzt mitmachen!

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