Python3 und stdout

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
scientific
Beiträge: 3022
Registriert: 03.11.2009 13:45:23
Lizenz eigener Beiträge: Artistic Lizenz
Kontaktdaten:

Python3 und stdout

Beitrag von scientific » 14.06.2016 12:41:05

Hi Leute!

Ich habe hier ein Python-Skript, welches durchaus auch mal länger läuft und währenddessen div. Ausgaben mit print() ausspuckt.

Dieses Skript wird von einer systemd-unit aufgerufen.

Jetzt ist mir aufgefallen, dass offenbar die ganzen print()-Ausgaben gepuffert werden, und erst am Ende, wenn das Skript fertig ist, auf stdout ausgespuckt. Dieses Phänomen beobachte ich sowohl in journald, aber auch mit

Code: Alles auswählen

python-script|less
. Die Ausgabe wird in less auch erst am Ende angezeigt.

Ich bin noch relativ neu in Python. Muss ich irgendwas besonderes beachten, dass die print()-ausgaben sofort ausgegeben werden? Ich würde nämlich manchmal gerne mit

Code: Alles auswählen

journalctl -f
mitverfolgen, wie weit mein Service bereits fortgeschritten ist...

lg scientific
dann putze ich hier mal nur...

Eine Auswahl meiner Skripte und systemd-units.
https://github.com/xundeenergie

auch als Debian-Repo für Testing einbindbar:
deb http://debian.xundeenergie.at/xundeenergie testing main

Benutzeravatar
smutbert
Beiträge: 8342
Registriert: 24.07.2011 13:27:39
Wohnort: Graz

Re: Python3 und stdout

Beitrag von smutbert » 14.06.2016 12:58:10

Also ich kenn mich nicht besonders gut aus in python, aber ich weiß, dass ich ein paar Skripte habe, die mit dem simpelstmöglichen print-Kommando einen Text zur Laufzeit sofort ausgeben.

edit: Allerdings wohl mit python2 nicht python3.
edit2: http://stackoverflow.com/questions/1077 ... -buffering

scientific
Beiträge: 3022
Registriert: 03.11.2009 13:45:23
Lizenz eigener Beiträge: Artistic Lizenz
Kontaktdaten:

Re: Python3 und stdout

Beitrag von scientific » 14.06.2016 13:14:23

Vielen Dank!

Hab jetzt als erste Zeile im Script

Code: Alles auswählen

#!/usr/bin/python3 -u
Und nun spuckt es die print()-Ausgaben gleich aus.

lg scientific!
dann putze ich hier mal nur...

Eine Auswahl meiner Skripte und systemd-units.
https://github.com/xundeenergie

auch als Debian-Repo für Testing einbindbar:
deb http://debian.xundeenergie.at/xundeenergie testing main

Antworten