print() Ausgabe auf LXTerminal (Raspberry)

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Toni-PV
User
Beiträge: 4
Registriert: Dienstag 9. Februar 2021, 11:10

Hallo zusammen

Ich lasse alle 5 Minuten einen crontab-job laufen. (*/5 * * * * python3 /home/pi/Python_Scripts/test.py)
Im auszuführenden Script befindet sich eine print() Anweisung zur Ausgabe.

Im einfachsten Fall besteht das Script (test.py) aus folgendem:
print("Hallo Python-Forum")
Nun stellt sich mir das Problem, dass ich nicht hinkriege, dass das Script automatisch das LXTerminal öffnet und ich die Ausgabe danach alle 5 Minuten beobachten kann.

Wie muss ich das Script erweitern, dass die print() Ausgaben sichtbar werden.

Besten Dank
Toni-PV
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Das sollte man auch nicht hinkriegen. Ich würde mich schön bedanken, wenn 100 Dämons die im Hintergrund laufen alle paar Sekunden ein Fenster aufmachen, und mir log Meldungen ins Gesicht schmeißen.

Dafür benutz man stattdessen log files. In Python mit dem logging Modul. Und dann hat man eine definierte Datei unter /var/log/meinding.log, und wenn man will, macht man ein Terminal auf, und schaut mit tail oder less rein.
Toni-PV
User
Beiträge: 4
Registriert: Dienstag 9. Februar 2021, 11:10

...
Vielen Dank für die schnelle Antwort.
Habe vergessen zu schreiben, dass das natürlich nur für das schnelle Testen des Codes wäre ...
Also ist es programmtechnisch nicht möglich? (sinnvoll muss es nicht sein! :mrgreen: )
...
Sirius3
User
Beiträge: 18274
Registriert: Sonntag 21. Oktober 2012, 17:20

Zum schnellen Testen benutzt man auch log-Dateien.
Toni-PV
User
Beiträge: 4
Registriert: Dienstag 9. Februar 2021, 11:10

Super ...
Ich hab's jetzt mit
print(" ...") >> log.txt
gelöst!
Darf ich fragen wie der Code bei deiner Lösung aussieht?
Vielen Dank
Benutzeravatar
sparrow
User
Beiträge: 4538
Registriert: Freitag 17. April 2009, 10:28

Das logging Modul hat ein Tutorial in der offiziellen Dokumentation.

Dass deine Lösung so aussieht, halte ich für ein Gerücht. Die Umleitung von stdout in eine Datei ist diskussionswürdig und funktioniert sicher nicht hinter einer print-Befehl.
narpfel
User
Beiträge: 691
Registriert: Freitag 20. Oktober 2017, 16:10

Die einfache Lösung für das Problem ist eine systemd-Timer-Unit, die das Programm startet. Alle Ausgaben des Programms landen dann automatisch im Syslog und können mit `journalctl` abgefragt werden.

Beispiel:

Timer-Unit:

Code: Alles auswählen

[Unit]
Description=Run /tmp/t.py every five minutes

[Timer]
OnActiveSec=1m
OnUnitActiveSec=5m
Persistent=true
Dazugehörige Service-Unit:

Code: Alles auswählen

[Unit]
Description=Produce some log output

[Service]
Type=oneshot
ExecStart=/tmp/t.py
Python-Programm:

Code: Alles auswählen

#!/usr/bin/env python3

from datetime import datetime


def main():
    print(f"some log output at {datetime.now()}")


if __name__ == "__main__":
    main()
Toni-PV
User
Beiträge: 4
Registriert: Dienstag 9. Februar 2021, 11:10

Hallo

@narpfel ... vielen Dank, als Anfänger sieht das kompliziert aus, aber ich werde mich einlesen. Vielen Dank !
@spatz ... vielen Dank. ... hab wohl etwas zu abstrakt geschrieben >> */5 * * * * python3 /home/pi/Python_Scripts/db_abfrage_test2.py >> log.txt :roll:
Antworten