MaxMustermann Geschrieben December 30, 2020 at 16:34 Geschrieben December 30, 2020 at 16:34 Liebe Tinkerforge Community, nun habe ich mein erstes Python Script erstellt und die Funktionen der einzelnen Bausteine verifiziert. Sicher gibt es da noch einiges an Verbesserungsmöglichkeiten aber es tut was es soll und das ist für mich als Maschinenbauer, Ende Fünfzig schon einmal ein Erfolg. Über Hinweise und Tipps freue ich mich natürlich. Nun hätte ich es gern so, dass wenn der Raspberry Pi startet das Script ebenfalls gestartet wird. Von den vielen Methoden dies zu erreichen habe ich zwei ausprobiert (rc.local und systemd) mit ähnlichem Misserfolg. In die rc.local habe ich folgende Zeile vor exit 0 eingetragen:python /home/pi/MyFirstScript.py >/tmp/MyFirstScript.log 2>&1 & Die im Verzeichnis tmp erstellte Datei MyFirstScript.log liefert folgendes:Traceback (most recent call last): File "/home/pi/MyFirstScript.py", line 12, in <module> from tinkerforge.ip_connection import IPConnection ImportError: No module named tinkerforge.ip_connection Bei der Methode systemd listet der Befehl sudo systemctl status myscript.service eine ähnliche Fehlermeldung. Sicher habt ihr dafür Lösungsvorschläge. Vielen Dank im voraus! Euer Max Mustermann MyFirstScript.py Zitieren
DoIT Geschrieben January 1, 2021 at 21:21 Geschrieben January 1, 2021 at 21:21 Hallo Max Mustermann ... ein paar kleine Anmerkungen: 1.) Hast du die tinkerforge bindings installiert? pip3 install tinkerforge --> für den Raspi 2.) Es ist meiner Erfahrung nach nicht optimal mit input in python zu warten wenn du auch keinen Input erwartet also in deinem Fall da du dies ja als deamon laufen lassen möchtest. Es würde sich sowas anbieten: import threading # Anstatt input waiting = threading.Event() waiting.wait() 3. Würde ich dir empfehlen deinen Code eventuell auf den Robusten Ansatz umzustrukturieren um Probleme zu vermeiden. Grüße Markus Zitieren
MaxMustermann Geschrieben January 4, 2021 at 19:56 Autor Geschrieben January 4, 2021 at 19:56 Hallo Markus, vielen Dank für deine Hinweise und Tipps. Die tinkerforge bindings sind installiert. Ich nehme mal an, dass ohne die bindings das Python Script nicht laufen würde. Dies tut es, wenn ich es manuell starte. Die Fehlermeldung im Logfile zeigt auf Zeile 12 im Script beginnend mit <from ...> . Auch wenn ich die Reihenfolge der from-Aufrufe verändere, beschwert sich das Logfile immer an Zeile 12. Es muss also an dem Aufruf <from> liegen. Was könnten die Ursachen dafür sein? Punkt 2.) habe ich umgesetzt. <import threading> funktioniert genauso wie <import time>. Was ist der Vorteil deines Vorschlags? Mit dem Robusten Ansatz werde ich mich in den kommenden Tagen auseinandersetzen und erst einmal an einem kleineren Script mit wenig Funktionalität üben. Eine Anwendung, die möglichst robust gegenüber Störungen in der Kommunikation ist, wäre mir auch wichtig. Danke für den Tipp! Viele Grüße Max Zitieren
DoIT Geschrieben January 5, 2021 at 07:21 Geschrieben January 5, 2021 at 07:21 Wie startest du das script? Mit python3 "scriptname.py" Verwendest du eine Virtualenvironment? Wenn du den Python Interpreter mit python3 startest und dann in die interaktive shell dein import eingibst kommt dann der gleiche Fehler? Es macht einen Unterschied ob du mit pip(für python version 2.*) oder mit pip3(für python version 3.*) die bindings installierst. Vielleicht hast du da etwas verwechselt? Grüße Markus Zitieren
MaxMustermann Geschrieben January 5, 2021 at 08:42 Autor Geschrieben January 5, 2021 at 08:42 Moin Markus, das Script läuft unter Python 3.7.3. Manuell gestartet ist alles prima sowohl im Eingabefenster <python MyFirstScript.py> als auch unter Thonny 3.3.0, welches ebenfalls auf Python 3.7.3 zugreift. Nur in Verbindung mit dem Autostart kommt es zu den beschriebenen Fehlern (siehe Logfile). Was ist denn eine Virtualenvironment? Ich weiß, dass solche Fragen für Profis oft schwer zu ertragen sind. Aber nur wer fragt lernt auch etwas. Danke und beste Grüße Max Zitieren
DoIT Geschrieben January 5, 2021 at 08:59 Geschrieben January 5, 2021 at 08:59 Normal ist es so das unter raspian(debian) der Befehl "python" auf die Version 2.* von python zeigt und der Befehl "python3" auf die Version 3.* von python zeigt, genau wie mit "pip" und "pip3". Das kann man zwar ändern ist aber nach dem frischen installieren so. Über die local.rc Datei müsstest du also auch "python3" anstatt python schreiben wenn du das script mit python3 starten möchtest. Schau mal hier: rc.local - Raspberry Pi Documentation Und unter systemd ist das ähnlich. systemd - Raspberry Pi Documentation Grundsätzlich würde ich dir dazu raten systemd zu verwenden dann kannst du dein Programm mit systemctl start bzw. stop etc. steuern. Virtualenvironments kannst du hier nachlesen: Python Virtual Environments: A Primer – Real Python Kurz: Damit kannst du deine eigene Laufzeitumgebung unabhängig vom global installiertem python erstellen. Zitieren
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.