Hallo - Python dummy!
Ich habe ein Python-Prog mit diversen print-Ausgaben zur Kontrolle.
Fertig gestellt läuft dieses Programm als service. Dann sehe ich aber leider die Ausgaben nicht mehr (bzw. mit systemctl status mnur wenige Zeilen).
Gibt es eine Möglichkeit, durch EINE Zeile am Anfang des Programms ALLE Printausgaben in eine logdatei zu leiten OHNE das ich jede print-Ausgabe ändern muss? (etwas mit stdout = ???)
Print-Ausgaben in Datei OHNE Programmänderung?
- __blackjack__
- User
- Beiträge: 13236
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@wonk: Natürlich geht das, es wäre nicht mal unwahrscheinlich das Du gar nichts machen musst weil das schon passiert wenn Du die letzten paar Ausgaben schon über die Systemwerkzeuge bekommst.
Ansonsten kann man eigentlich immer ausserhalb des Programms die Standausgabe und die Standardfehlerausgabe irgendwohin umleiten.
Ansonsten kann man eigentlich immer ausserhalb des Programms die Standausgabe und die Standardfehlerausgabe irgendwohin umleiten.
Please call it what it is: copyright infringement, not piracy. Piracy takes place in international waters, and involves one or more of theft, murder, rape and kidnapping. Making an unauthorized copy of a piece of software is not piracy, it is an infringement of a government-granted monopoly.
Sonst nimm doch notfalls einfach redirect_stdout() und übergib dort dein Logfile.
Lässt allerdings nichts Gutes ahnen, wenn du an der Stelle schon dein Tool nicht im Griff hast...
Lässt allerdings nichts Gutes ahnen, wenn du an der Stelle schon dein Tool nicht im Griff hast...
- __blackjack__
- User
- Beiträge: 13236
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@wonk: Das ist letztlich keine Python-Frage sondern wie das Programm gestartet wird.
Please call it what it is: copyright infringement, not piracy. Piracy takes place in international waters, and involves one or more of theft, murder, rape and kidnapping. Making an unauthorized copy of a piece of software is not piracy, it is an infringement of a government-granted monopoly.
- noisefloor
- User
- Beiträge: 3882
- Registriert: Mittwoch 17. Oktober 2007, 21:40
- Wohnort: WW
- Kontaktdaten:
Hallo,
wenn ein Python-Skript als Service via systemd gestartet wird geht doch AFAIK alles, was nach stdout geht (inkl. standardmäßig, was du unter Python mit `print()` machst) ins Journal von systemd Um alle Ausgaben zu sehen musst du halt das Journal via `journalctl` abfragen und gezielt nach deiner Unit filtern.
Richtiges Logging in eine Datei deiner Wahl geht über das Python-Modul `logging`. Bei Standardlogging ist das auch mit wenigen Zeilen Code konfiguriert.
Gruß, noisefloor
wenn ein Python-Skript als Service via systemd gestartet wird geht doch AFAIK alles, was nach stdout geht (inkl. standardmäßig, was du unter Python mit `print()` machst) ins Journal von systemd Um alle Ausgaben zu sehen musst du halt das Journal via `journalctl` abfragen und gezielt nach deiner Unit filtern.
Richtiges Logging in eine Datei deiner Wahl geht über das Python-Modul `logging`. Bei Standardlogging ist das auch mit wenigen Zeilen Code konfiguriert.
Gruß, noisefloor
- __blackjack__
- User
- Beiträge: 13236
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
Alternativ gäbe es externe Module für's Logging wie `loguru` oder `structlog`, je nachdem was für Anforderungen man an so ein Protokoll hat.
Please call it what it is: copyright infringement, not piracy. Piracy takes place in international waters, and involves one or more of theft, murder, rape and kidnapping. Making an unauthorized copy of a piece of software is not piracy, it is an infringement of a government-granted monopoly.
Hallo!
Ergebnis meiner Versuche:
- Standard-Output=append: /home/pi/sperre.log in *.service wird im syslog als Fehler zurückgewiesen
- im syslog finden sich auch so Ausgaben meines Python-Progs, aber nur sporadisch, nicht alle, nicht immer
- journalctl -o verbose _PID=<PID meines prozesses> ergibt "no entries"
Ergebnis meiner Versuche:
- Standard-Output=append: /home/pi/sperre.log in *.service wird im syslog als Fehler zurückgewiesen
- im syslog finden sich auch so Ausgaben meines Python-Progs, aber nur sporadisch, nicht alle, nicht immer
- journalctl -o verbose _PID=<PID meines prozesses> ergibt "no entries"
Gruss, wonk
- __blackjack__
- User
- Beiträge: 13236
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@wonk: Was heisst „wird im syslog als Fehler zurückgewiesen“ konkret? Auch wenn man das korrekt schreibt, ohne Zeichen die da nicht hingehören? Hat systemd die entsprechenden Rechte die Datei zu schreiben?
Der dritte Punkt ohne die kaputte Umleitung? Und wenn man da explizit angibt, das die Ausgabe ins Journal soll?
Der dritte Punkt ohne die kaputte Umleitung? Und wenn man da explizit angibt, das die Ausgabe ins Journal soll?
Please call it what it is: copyright infringement, not piracy. Piracy takes place in international waters, and involves one or more of theft, murder, rape and kidnapping. Making an unauthorized copy of a piece of software is not piracy, it is an infringement of a government-granted monopoly.
Hallo,
im syslog finde ich:
Failed to parse output specifier, ignoring append.....
Die log-Datei habe ich angelegt und Lese/Scheibrechte für alle gegeben.
Ich habe jetzt mit journalctl _SYSTEMD_UNIT=... jede Menge Ausgaben gefunden, die reichen aber nicht mehr für das laufende Prg. Wo kann ich die Datei sehen, aus der diese Ausgaben sind?
im syslog finde ich:
Failed to parse output specifier, ignoring append.....
Die log-Datei habe ich angelegt und Lese/Scheibrechte für alle gegeben.
Ich habe jetzt mit journalctl _SYSTEMD_UNIT=... jede Menge Ausgaben gefunden, die reichen aber nicht mehr für das laufende Prg. Wo kann ich die Datei sehen, aus der diese Ausgaben sind?
Gruss, wonk
- noisefloor
- User
- Beiträge: 3882
- Registriert: Mittwoch 17. Oktober 2007, 21:40
- Wohnort: WW
- Kontaktdaten:
Hallo,
welche Distro nutzt du? Bei den meisten Distro ist journald von systemd für's Logging zuständig und auf syslog wird "nur noch" je nach Konfiguration weitergeleitet (oder eben nicht).
Das gut systemd ist, dass es sehr umfangreich dokumentiert ist, inkl. journalctl.
Um die Logs von einer Unit gezielt abzufragen rufst du `journalctl -u NAME_DEINER_UNIT` auf. `NAME_DEINER_UNIT` ist der Dateiname deiner Unitdatei. Mit den Optionen `--since` und `--until` und `--boot` kannst du den Zeitraum einschränken.
Gruß, noisefloor
welche Distro nutzt du? Bei den meisten Distro ist journald von systemd für's Logging zuständig und auf syslog wird "nur noch" je nach Konfiguration weitergeleitet (oder eben nicht).
Das gut systemd ist, dass es sehr umfangreich dokumentiert ist, inkl. journalctl.
Um die Logs von einer Unit gezielt abzufragen rufst du `journalctl -u NAME_DEINER_UNIT` auf. `NAME_DEINER_UNIT` ist der Dateiname deiner Unitdatei. Mit den Optionen `--since` und `--until` und `--boot` kannst du den Zeitraum einschränken.
Gruß, noisefloor
Hallo,
es ist ein Spezialimage (volkszähler auf Basis von Debian wohl).
Heute morgen kamen auf einmal die vermissten Daten mit journalctl. Offensichtlich werden die Daten in - wohin auch immer - nicht kontinuierlich geschrieben, sondern kommen einmal am Tag für den ganzen Vortag. Ist das normal? In journald.conf finde ich nur auskommentierte Einträge
Gruß, wonk
es ist ein Spezialimage (volkszähler auf Basis von Debian wohl).
Heute morgen kamen auf einmal die vermissten Daten mit journalctl. Offensichtlich werden die Daten in - wohin auch immer - nicht kontinuierlich geschrieben, sondern kommen einmal am Tag für den ganzen Vortag. Ist das normal? In journald.conf finde ich nur auskommentierte Einträge
Gruß, wonk
Gruss, wonk
- noisefloor
- User
- Beiträge: 3882
- Registriert: Mittwoch 17. Oktober 2007, 21:40
- Wohnort: WW
- Kontaktdaten:
Hallo,
Entweder machst du einen Fehler bei der Abfrage oder deine (zumindest mir nicht bekannte) Distro ist extrem komisch. Jedenfalls ist das Problem von Python und die solltest das Problem im Supportforum deines Vertrauens der von dir verwendeten Distro weiter verfolgen. Oder wie vorgeschlagen richtiges Logging via Python mit einem passenden Python-Modul einsetzen.
Gruß, noisefloor
Nein, ist es nicht. Ich wüßte auch nicht, dass man journald so konfigurieren kann. Man kann das Logging in Journal so einstellen, dass es temporär ist (=nur im RAM / Temp-Speicher lebt = bei Neustart des Rechners weg) oder persistent mit einer begrenzten Größe des Journals in Tagen oder Größe oder gar kein Logging.Offensichtlich werden die Daten in - wohin auch immer - nicht kontinuierlich geschrieben, sondern kommen einmal am Tag für den ganzen Vortag. Ist das normal?
Entweder machst du einen Fehler bei der Abfrage oder deine (zumindest mir nicht bekannte) Distro ist extrem komisch. Jedenfalls ist das Problem von Python und die solltest das Problem im Supportforum deines Vertrauens der von dir verwendeten Distro weiter verfolgen. Oder wie vorgeschlagen richtiges Logging via Python mit einem passenden Python-Modul einsetzen.
Gruß, noisefloor
Also in der Zeit hättest du locker "print" durch logging ersetzen können, und noch was für die Zukunft gelernt.
MorgenGrauen: 1 Welt, 8 Rassen, 13 Gilden, >250 Abenteuer, >5000 Waffen & Rüstungen,
>7000 NPC, >16000 Räume, >200 freiwillige Programmierer, nur Text, viel Spaß, seit 1992.
>7000 NPC, >16000 Räume, >200 freiwillige Programmierer, nur Text, viel Spaß, seit 1992.
- __blackjack__
- User
- Beiträge: 13236
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
Naja, ich würde auch bei `logging` (oder `loguru`) trotzdem einfach nach stdout loggen und den Rest über systemd machen. Dafür ist das ja da.
Please call it what it is: copyright infringement, not piracy. Piracy takes place in international waters, and involves one or more of theft, murder, rape and kidnapping. Making an unauthorized copy of a piece of software is not piracy, it is an infringement of a government-granted monopoly.