Nach Boot Terminal öffnen und Programm mit Endlosschleife öffnen

Python auf Einplatinencomputer wie Raspberry Pi, Banana Pi / Python für Micro-Controller
Antworten
mxg
User
Beiträge: 5
Registriert: Freitag 14. August 2020, 14:22

Hallo.
Ich versuche seit einer Weile Folgendes zu erreichen:
Nach dem Booten des Raspberry Pi soll ein Terminal geöffnet werden und darin ein python programm gestartet werden. Dieses python Programm hat eine Endlosschleife, in der jedes Mal ein input erwartet wird.
Wenn ich das python Programm manuell in einem Terminal starte, dann funktioniert es prima. Es wartet immer auf einen input und wenn der input da ist, wird er verarbeitet und das Programm läuft weiter.

Nun habe ich genau das Gleiche wie in
https://forum-raspberrypi.de/forum/thre ... post271273
beschrieben gemacht und es öffnet sich nach dem Booten tatsächlich ein Terminal und wartet auf einen input. Aber sobald der input da ist, schließt sich das Terminal direkt. Das Programm wird also nicht vollständig ausgeführt bzw. es bricht ab anstatt dass es in einer Wiederholungsschleife ist.

Kann mir evtl. jemand helfen, es hinzukriegen, dass mein Terminal bleibt und das Programm weiter läuft?

Ich habe im folder /home/pi/.config/autostart/ eine .desktop Datei mit folgendem Inhalt:

[Desktop Entry]
Type=Application
Name=pythonprogramm
Comment=Einlesen Starten
Exec=lxterminal -e python /home/pi/Einlesen.py
Terminal=true

und Einlesen.py sieht in etwa so aus:

#!/usr/bin/python

import datetime
currenttime=0
while currenttime>=0:
...
Benutzeravatar
sparrow
User
Beiträge: 4514
Registriert: Freitag 17. April 2009, 10:28

Es kommt zu einem Fehler. Da das Terminal aber nur geöffnet wird, um dein Programm zu starten, wird es zusammen mit dem Programm auch wieder geschlossen.
Typische Probleme: Du verwendest relative Pfade zu Dateien und die sind anders, wenn du das Programm von Hand startest.
Sirius3
User
Beiträge: 18227
Registriert: Sonntag 21. Oktober 2012, 17:20

Ohne das Programm zu sehen, kann man da jetzt wirklich wenig sagen. Wenn ein Programm dauerhaft laufen soll, dann muss es auch im Fehlerfall sinnvoll weiterarbeiten.
Was man aus den vier Zeilen jetzt schon sagen kann: veraltete Python-Version, zu wenig Funktionen, while- statt while-True-Schleife.
Benutzeravatar
hyle
User
Beiträge: 96
Registriert: Sonntag 22. Dezember 2019, 23:19
Wohnort: Leipzig

Hätte nicht gedacht, dass sich nach so langer Zeit jemand an meiner *.desktop-Datei orientiert. :)

Btw. "Terminal=true" würde ich im Nachhinein auf "Terminal=false" ändern, da es ja keines virtuellen Terminals bedarf.

Das hat aber nichts mit dem Problem zu tun, das liegt wie bereits geschrieben im Skript. Aus Interesse habe ich mal ein kleines Testskript (eingabe.py) erstellt:

Code: Alles auswählen

#!/usr/bin/python3

while True:
    eingabe = input("Eingabe: ")
    if eingabe in ["exit","aus","beenden"]:
        break
    else:
        print(eingabe)
Die dazugehörige test.desktop sieht so aus:

Code: Alles auswählen

[Desktop Entry]
Type=Application
Name=Eingabetest
Comment=Test
Exec=lxterminal -e /usr/bin/python3 /home/pi/skripte/eingabe.py
Terminal=false
Das ganze funktioniert wie es soll. Alle anderen Eingaben werden ausgegeben, außer bei Eingabe von "exit", "aus" oder "beenden". Dann wird die Schleife verlassen, das Skript läuft durch und der Terminal beendet sich.
Alles was wir sind ist Sand im Wind Hoschi.
Antworten