Seite 1 von 1

Autostart einer Python Datei funktioniert nicht richtig.

Verfasst: Montag 27. Januar 2020, 13:15
von Code_Zero
Hallo zusammen,
ich habe ein Problem mit den Automatischen starten eines Python Skripts.
Ich möchte wie in folgenden Programm zusehen ist, 2 verschiedene Skripte starten lassen.

Code: Alles auswählen

screen -d -m python3 /home/pi/gps.py
screen -d -m pyhton3/home/pi/temperatur.py
Das Temperatur Programm wird ohne Probleme beim booten gestartet, dass gps Programm stürzt allerdings direkt ab. Ich denke es liegt daran das es nicht direkt Koordinaten empfängt. Ich habe wie im folgendem Programm versucht dieses Problem mit Try zu lösen so das es nicht abstürzt sondern einfach nur "Ein Fehler ist aufgetreten" ausgibt.

Code: Alles auswählen

import serial
import time
import string
import pynmea2

print('gps.py gestartet')
while True:
    port="/dev/ttyAMA0"
    newdata="Keine neuen Daten"
    try:
    	ser=serial.Serial(port, baudrate=9600, timeout=0.5)
    	dataout = pynmea2.NMEAStreamReader()
    	newdata=ser.readline()
    except:
	print("Ein Fehler ist aufgetreten")

    print('neue Daten:' + newdata)

    if newdata[0:6] == "$GPRMC":

        newmsg=pynmea2.parse(newdata)
        lat=newmsg.latitude
        lng=newmsg.longitude
        gps = "Latitude=" + str(lat) + "and Longitude=" + str(lng)
        print(gps)

        with open("/home/pi/Desktop/Koordinaten.txt",'a') as f:
           f.write(gps)
           f.write('\n') 
           f.close()
Da es jetzt immer noch nicht automatisch startet und ich nicht mehr weiter weiß, wollte ich mal fragen ob Jemand schon mal so ein ähnliches Problem hatte oder jemand ein Lösungsvorschlag für dieses Problem hat. (ich habe auch schon versucht das Programm einfach erst später zu starten was allerdings auch nicht optimal ist da sobald das GPS einmal eine Signal pause hat das Programm wieder abstürzt.)

Re: Autostart einer Python Datei funktioniert nicht richtig.

Verfasst: Montag 27. Januar 2020, 13:41
von Sirius3
Und was ist die Fehlerausgabe, die Du bekommst?
Das nackte `except` kannst Du auch gleich wieder löschen, weil so wirst Du nie erfahren, was der wirkliche Fehler ist.
Strings werden nicht mit + zusammengestückelt, sondern man benutzt Stringformatierung.
Eine Datei, die mit Hilfe des with-Blocks geöffnet wird, braucht kein close.

Re: Autostart einer Python Datei funktioniert nicht richtig.

Verfasst: Montag 27. Januar 2020, 13:56
von Code_Zero
Das Programm an sich läuft sehr gut wenn ich es Manuel starte. Was halt nicht geht ist der Autostart. Es wird keine Fehlermeldung ausgegeben was die Fehlerdiagnose natürlich schwer macht. Ich schließe die Textdatei Jedes mal wieder damit die Werte dauerhaft gespeichert werden da das Programm in meinen Verwendungszweck irgendwann abgebrochen wird, da der Raspberry kein Strom mehr bekommt. (Und sry wenn ich da was falsch mit + zusammengestückelt habe, habe erst mit python angefangen und habe das irgendwo so gelesen. Da es geklappt hat hab ich es nicht hinterfragt.)

Re: Autostart einer Python Datei funktioniert nicht richtig.

Verfasst: Montag 27. Januar 2020, 14:02
von Jankie
Das with beinhaltet das schließen schon, also statt

Code: Alles auswählen

file = open("Datei.txt", "w", endcoding = "UTF-8")
file.write("xyz")
file.close()
benutzt man

Code: Alles auswählen

with open(("Datei.txt", "w", endcoding = "UTF-8") as file:
    file.write("XYZ")
Und zu Stringformatierung:

statt String mit "+" zusammen zu setzten benutzt man Stringformatierung

Code: Alles auswählen

gps = "Latitude=" + str(lat) + "and Longitude=" + str(lng)

Code: Alles auswählen

gps = f"Latitude= {lat} and Longitude= {lng}"

Re: Autostart einer Python Datei funktioniert nicht richtig.

Verfasst: Montag 27. Januar 2020, 14:06
von sparrow
Solange da ein nacktes Except steht, wird auch niemals eine Fehlermeldung ausgegeben. Das hat Sirius doch bereits geschrieben.
Und dass du bei jedem Schleifendurchlauf wieder die serielle Schnittstelle aufmachst, scheint zumindest seltsam.
Und dataout wird nie verwendet.

Re: Autostart einer Python Datei funktioniert nicht richtig.

Verfasst: Montag 27. Januar 2020, 14:11
von __blackjack__
@Code_Zero: Du schliesst die Datei zweimal, einmal weil da ``with`` verwendet wird und dann noch mal mit dem `close()`-Aufruf. Eines davon ist zu viel und zwar der `close()`-Aufruf, denn man verwendet das ``with`` um eben nicht selbst dafür sorgen zu müssen das in jedem Fall die Datei geschlossen wird.

Was ist denn „der Autostart“? Wie wird das gestartet? Und irgendeine Ausgabe muss es doch geben, denn da sind `print()`-Aufrufe drin. Das ``print('gps.py gestartet')`` sollte ja mindestens mal ausgeführt werden. Was das verhindern könnte wäre wenn ``pynmea2`` oder ``serial`` nicht importiert werden könnten, dann käme aber eine entsprechende Ausgabe vom `ImportError`.

Was man als Autostart IMHO machen *sollte* wäre eine SystemD-Service-Unit schreiben. Da braucht man dann auch kein `screen` sondern kann sich um sinnvolle Logdateien kümmern. Und auch um eine Überwachung ob der Prozess läuft und was passieren soll wenn der sich durch einen Fehler beendet.