Unterschied Konsole / Interpreter

Python auf Einplatinencomputer wie Raspberry Pi, Banana Pi / Python für Micro-Controller
Loetauge
User
Beiträge: 9
Registriert: Donnerstag 19. September 2019, 12:10

Donnerstag 19. September 2019, 12:23

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 :?:
Sirius3
User
Beiträge: 10548
Registriert: Sonntag 21. Oktober 2012, 17:20

Donnerstag 19. September 2019, 12:53

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.
Benutzeravatar
__blackjack__
User
Beiträge: 4192
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Donnerstag 19. September 2019, 12:54

@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.
“Give a man a fire and he's warm for a day, but set fire to him and he's warm for the rest of his life.”
— Terry Pratchett, Jingo
Loetauge
User
Beiträge: 9
Registriert: Donnerstag 19. September 2019, 12:10

Donnerstag 19. September 2019, 13:15

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?
__deets__
User
Beiträge: 6386
Registriert: Mittwoch 14. Oktober 2015, 14:29

Donnerstag 19. September 2019, 13:49

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.
Benutzeravatar
__blackjack__
User
Beiträge: 4192
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Donnerstag 19. September 2019, 14:05

@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.
“Give a man a fire and he's warm for a day, but set fire to him and he's warm for the rest of his life.”
— Terry Pratchett, Jingo
Loetauge
User
Beiträge: 9
Registriert: Donnerstag 19. September 2019, 12:10

Donnerstag 19. September 2019, 14:23

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?
__deets__
User
Beiträge: 6386
Registriert: Mittwoch 14. Oktober 2015, 14:29

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.
Loetauge
User
Beiträge: 9
Registriert: Donnerstag 19. September 2019, 12:10

Donnerstag 19. September 2019, 14:49

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?
Loetauge
User
Beiträge: 9
Registriert: Donnerstag 19. September 2019, 12:10

Donnerstag 19. September 2019, 14:57

__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?
__deets__
User
Beiträge: 6386
Registriert: Mittwoch 14. Oktober 2015, 14:29

Donnerstag 19. September 2019, 15:20

Das ist eine Konfigrationsdatei die ein Programm started. Kann man sich ergoogeln.
Loetauge
User
Beiträge: 9
Registriert: Donnerstag 19. September 2019, 12:10

Donnerstag 19. September 2019, 15:27

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
Benutzeravatar
__blackjack__
User
Beiträge: 4192
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Donnerstag 19. September 2019, 15:32

@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.
“Give a man a fire and he's warm for a day, but set fire to him and he's warm for the rest of his life.”
— Terry Pratchett, Jingo
Loetauge
User
Beiträge: 9
Registriert: Donnerstag 19. September 2019, 12:10

Donnerstag 19. September 2019, 18:11

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.
Benutzeravatar
__blackjack__
User
Beiträge: 4192
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Donnerstag 19. September 2019, 19:00

``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.
“Give a man a fire and he's warm for a day, but set fire to him and he's warm for the rest of his life.”
— Terry Pratchett, Jingo
Antworten