Seite 1 von 1

Unterschied Konsole / Interpreter

Verfasst: Donnerstag 19. September 2019, 12:23
von Loetauge
Moin in die Runde,

Warum besteht im Programmablauf ein Unterschied, ob das Programm mit einem Interpreter (Thonny) oder dirket über die Konsole gestartet wird.
Ein Beispiel sei genannt:
Ein Programm generiert verschiedene Anzeigen auf einem LCD-Display, die Hintergrundbeleuchtung erlischt nach 2 min. Starte ich das Programm mit Thonny, funktioniert das auch. Lasse ich das Programm beim Start des Raspberry automatisch starten, bleibt das Display ständig an :?:

Re: Unterschied Konsole / Interpreter

Verfasst: Donnerstag 19. September 2019, 12:53
von Sirius3
Da mußt Du die Thonny-Entwickler fragen, warum sie vom erwarteten Verhalten abweichen.

Warum Dein Programm nicht funktioniert, kann man ohne Code nicht sagen.

Re: Unterschied Konsole / Interpreter

Verfasst: Donnerstag 19. September 2019, 12:54
von __blackjack__
@Loetauge: Autostart ist ja noch mal etwas anderes als nur der Unterschied zwischen IDE und Konsole. Das kann eine komplett andere Umgebung sein, mit anderem Benutzer der das ausführt und damit auch mit anderen Rechten, einem anderen Arbeitsverzeichnis, anderen Umgebungsvariablen, und noch einiges mehr.

Beim automatischen Start ist auch die Frage *wie* das denn automatisch gestartet wird, also in welchem Zustand sich das System dann befindet und was das Programm alles vom System braucht.

Re: Unterschied Konsole / Interpreter

Verfasst: Donnerstag 19. September 2019, 13:15
von Loetauge
Gestartet wird über einen Eintrag in etc/rc.local

Die ersten Zeilen im programm sind:
#!/usr/bin/env python
# coding=utf-8
kann ich mit weiteren Einträgen für gleiche Bedingungen sorgen?

Re: Unterschied Konsole / Interpreter

Verfasst: Donnerstag 19. September 2019, 13:49
von __deets__
Ich bin ja ein bisschen skeptisch, das sowas wie die Hintergrundbeleuchtung davon beeinflusst ist. Was du sicherstellen solltest ist, den gleichen Interpreter zu benutzen. Mach mal ein "print(sys.executable)" in den Code, und check wie der in der IDE und im autstart aussieht. Fuer letzteres musst du ggf. statt per normalem print einfach in eine /tmp/irgendwas-Datei schreiben.

Re: Unterschied Konsole / Interpreter

Verfasst: Donnerstag 19. September 2019, 14:05
von __blackjack__
@Loetauge: Das sieht nach Python 2 aus — damit würde ich keine neuen Programme mehr anfangen. Das hat nur noch weniger als 3 Monate ”Lebenszeit” bis es in Rente geht.

Re: Unterschied Konsole / Interpreter

Verfasst: Donnerstag 19. September 2019, 14:23
von Loetauge
Da gibt es tatsächlich einen Unterschied
Mit Thonny ist das Python3
mit Autostart Python
würde es helfen
#!/usr/bin/env python3 zu schreiben?
oder muß das in rc.local festgelegt werden?

Re: Unterschied Konsole / Interpreter

Verfasst: Donnerstag 19. September 2019, 14:42
von __deets__
Das kommt drauf an was in dem rc.local steht. Wenn da nur das Skript steht, dann sollte das shebang anzupassen ausreichen. Wenn schon im rc.local ein python steht, dann muss da das volle Python stehen. Last but not least: rc.local benutzt man nicht. Auch wenn sich das tausendfach im Netz findet - das ist veraltet & schlecht. Schreib dir eine systemd-Unit.

Re: Unterschied Konsole / Interpreter

Verfasst: Donnerstag 19. September 2019, 14:49
von Loetauge
Der erste Teil der Frage hat sich erledigt, (Versuch macht klug), das muß dann wohl irgend wo im System festgelegt werden, das er mit Python3 arbeiten soll. Den grund für diesen fehler habe ich inzw. auch ermittelt. Zum Abschalten der Hintergrundbeleuchtung wird eine Variable hochgezählt und bei erreichen eines Wertes der Befehl lcd.lcd_backlight("off") abgesetzt. Diese Variable lasse ich mir versuchsweise im Display anzeigen. Was soll ich sagen, die bleibt bei 0. Der Zählalgorithmus funktioniert also nicht. Und das ist dann sicherlich nicht der einzige Haken, an dem das Programm hängen bleibt. Ich muß den Raspi wohl irgendwie überzeugen, mit Python3 zu arbeiten, aber wo und wie?

Re: Unterschied Konsole / Interpreter

Verfasst: Donnerstag 19. September 2019, 14:57
von Loetauge
__deets__ hat geschrieben: Donnerstag 19. September 2019, 14:42 Das kommt drauf an was in dem rc.local steht. Wenn da nur das Skript steht, dann sollte das shebang anzupassen ausreichen. Wenn schon im rc.local ein python steht, dann muss da das volle Python stehen. Last but not least: rc.local benutzt man nicht. Auch wenn sich das tausendfach im Netz findet - das ist veraltet & schlecht. Schreib dir eine systemd-Unit.
Das ist aber der einzige Versuch, das Script zu starten, der funktioniert. Alles andere, was ich im Netz gefunden habe, ist gescheitert Und was ist eine Systemd-Unit?

Re: Unterschied Konsole / Interpreter

Verfasst: Donnerstag 19. September 2019, 15:20
von __deets__
Das ist eine Konfigrationsdatei die ein Programm started. Kann man sich ergoogeln.

Re: Unterschied Konsole / Interpreter

Verfasst: Donnerstag 19. September 2019, 15:27
von Loetauge
Ich werde mal versuchen, mich schlau zu machen. Ist mit Google aber teilweise recht schwierig, zum einen wird in den Erklärungen mit Fachwörtern nur so um sich geworfen, was mich dann eher verwirrt . zum anderen sind viele Erläuterungen in englisch geschrieben und das ist halt nicht meins. Aber ich gebe nicht auf und google weiter
Aber für die bisherigen Antworten erstmal Danke. Das hat zumindest ein Stück weiter geholfen
Wenn sich was bei meinem Raspi tut, werde ich es berichten

Re: Unterschied Konsole / Interpreter

Verfasst: Donnerstag 19. September 2019, 15:32
von __blackjack__
@Loetauge: Wenn ein Programm in Python 3 geschrieben ist, dann sollte das auch in der She-Bang-Zeile stehen, denn die wird ausgewertet wenn man diese Datei als Programm startet.

Re: Unterschied Konsole / Interpreter

Verfasst: Donnerstag 19. September 2019, 18:11
von Loetauge
ich habe Python3 jetzt in dem programm und in rc.local eingetragen. Damit läuft es, zumindest, was die Abschaltung des Displays betrifft. Aber ich denke, das auch die anderen Probleme und Problemchen damit behoben sind. Ein längerer Probelauf steht noch aus.
Zu rc.local, das man das heute nicht mehr benutzt, will ich schon gerne glauben, aber was ist daran schlecht? Macht das irgend wann Probleme oder nur bei bestimmten Befehlen? Wo liegt der Hund begraben, wenn ich diese Autostartversion nutze? Wie ich schon erwänte, alle anderen Möglichkeiten, die ich im Netz gefunden (gegoogelt) habe, funktionierten nicht. Ich bin jetzt ehrlich etwas ratlos.

Re: Unterschied Konsole / Interpreter

Verfasst: Donnerstag 19. September 2019, 19:00
von __blackjack__
``rc.local`` ist halt veraltet und sollte es eigentlich nicht mehr geben. Das wird über kurz oder lang abgeschafft. Ein Nachteil gegenüber einer eigenen Systemd-Unit ist beispielsweise, dass man das nicht wie andere normale Dienste (de)aktivieren und stoppen/starten kann. Wenn da etwas nicht funktioniert mit dem Dienst, muss man tatsächlich den Rechner neu starten um die Sachen die in der ``rc.local`` stehen neu zu starten. Das ist gerade beim entwickeln sehr nervig.

Re: Unterschied Konsole / Interpreter

Verfasst: Donnerstag 19. September 2019, 20:00
von Loetauge
Ja, Ok. Das ist ein Argument. Aber wenn das Programm erst mal fehlerfrei läuft und der PI damit 24 Stunden am tag laufen soll, 365 Tage im Jahr (Heizungsregelung), dann ist das doch eigentlich egal. Sollte das Programm aus irgend einem Grund stoppen, mus die ganze Kiste sowieso neu gestartet werden

Re: Unterschied Konsole / Interpreter

Verfasst: Freitag 20. September 2019, 08:59
von __blackjack__
Wieso muss dann der ganze Rechner neu gestartet werden? Es kann ja auch ausreichen einfach den Heizungsregelungsdienst neu zu starten.

In einer Systemd-Service-Unit kann man auch angeben von welchen Diensten der Dienst abhängt. Wenn Dein Dienst beispielsweise von einem Datenbankdienst abhängt, oder einen cron-Job benötigt der Regelmässig etwas macht, kann man das auch in der *.service-Datei angeben, so dass der Dienst nicht startet wenn es keinen crond gibt, oder das er sauber gestoppt wird wenn man den Datenbankdienst stoppt. Man kann auch angeben unter welchen Umständen und wie der Dienst automatisch neu gestartet werden soll. Es können Umgebungsvariablen, Benutzer, Gruppe, Arbeitsverzeichnis etc. gesetzt werden. Ausgaben werden ins Systemd-Journal geschrieben. Und noch einiges mehr.

Re: Unterschied Konsole / Interpreter

Verfasst: Freitag 20. September 2019, 10:01
von Loetauge
Das sind alles Argumente, die für Systemd-Variante sprechen, zugegeben. Aber ich bin froh, das das Programm erstmal fehlerfrei läuft und auch automatisch startet. Über SSH kann ich dann auf den Rechner zugreifen. Alleine das Einrichten des SSH hat mich Stunden gekostet und ich war, ehrlich gesagt, kurz vor der Aufgabe. Dann wäre ein Kabelschwanz HDMI und USB daran gekommen. aber das läuft gott sei dank nun. Vielleicht noch als Erklärung zu meiner Person:
Ich habe die Programmierei ja nicht gelernt, an einer Schule oder so. Vor ca 2 Jahren habe ich einen VHS-Kurs Raspberry besucht (Dauer 6 Std.), Dann mit Google und verschiedener Lektüre eingearbeitet und zig Programmschnitzel geschrieben, um die Materie einigermaßen zu verstehen. Das alles musste dan ja noch in Deutsch gefunden werden (gar nicht so einfach) da Englisch zu meiner Schulzeit noch kein Thema war (ich bin inzw. über 70) Inzw habe ich ein Projekt am laufen (seit ca 1 Jahr) und danach habe ich mir die Heizungsregelung vorgenommen. Mein Programmierstil ist sicher nicht die Krönung vielleicht schlagen Sie als Experte ja die Hände überm Kopf zusammen, aber der Pi macht, was er soll und das ist für mich erstmal primär wichtig. OOP habe ich versuchsweise angegangen, aber wieder verworfen, zu kompliziert. Jetzt wissen sie, mit wem sie es hier zu tun haben und können vielleicht meine Argumention verstehen. Für mich ist die Programmierei eine Herausforderung, die es zu knacken gilt und es macht mich auch ein wenig stolz, wenn ich für ein Problem eine Lösung gefunden habe. Mit anderen Worten: aus Spass an der Freude, und dabei kommt auch noch was sinnvolles zustande.