Umleiten der Ausgaben in eine Datei

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
123456789
User
Beiträge: 3
Registriert: Mittwoch 9. Juni 2010, 16:32

Hallo,

Ich möchte die Ausgaben der print Befehle in eine Datei umleiten.
Beim start aus der Konsole mit "python script.py > file.txt" funktionierte das auch wunderbar.

Seitdem ich aber Teile des Scripts in eigenen Threads laufen lasse funktioniert das nicht mehr.

hat da jemand eine Idee was ich da falsch mache.

ich verwende:
Ubuntu 10.04
python 2.6
Benutzeravatar
b.esser-wisser
User
Beiträge: 272
Registriert: Freitag 20. Februar 2009, 14:21
Wohnort: Bundeshauptstadt B.

Koordinier das schreiben mit einer(-em?) threading.Lock()
oder
Schreib in den threads in ein Queue.Queue() un dlass einen (extra) thread in die Datei schreiben
oder
am besten:
Benutz das logging modul - das funktioniert 1A mit threads
hth, Jörg
edit: lauter typos
123456789
User
Beiträge: 3
Registriert: Mittwoch 9. Juni 2010, 16:32

Hallo Jörg,

vielen Danke für deinen Tipp. Das Logging- modul funktioniert wirklich super.
Aber was mich noch interessiert ist, warum der print- Befehl in Verbindung mit Threads Probleme macht.
Hast du dafür vlt. eine Erklärung?

danke!
Benutzeravatar
Rebecca
User
Beiträge: 1662
Registriert: Freitag 3. Februar 2006, 12:28
Wohnort: DN, Heimat: HB
Kontaktdaten:

Das ist ein allgemeines Nebenlauefigkeitsproblem, siehe z.B. Kritischer Abschnitt. Nur weil etwas beim Programmieren ein Befehl ist, heisst das noch lange nicht, dass die Operation atomar ist, sodass sich zwei Threads ins Gehege kommen koennen.
Offizielles Python-Tutorial (Deutsche Version)

Urheberrecht, Datenschutz, Informationsfreiheit: Piratenpartei
lunar

Wie sehen diese „Probleme“ denn genau aus? „Funktioniert nicht“ ist keine Fehlermeldung, zu der man viel sagen kann ...

Geraten würde ich sagen, dass die Ausgabe durcheinander ist, aber das liegt eben daran, dass Befehle selten atomar sind und die Ausführungsreihenfolge nicht deterministisch ist. Ein Thread, der "Hello World" auf die Konsole schreibt, kann gut und gerne nach "Hello" unterbrochen werden. Wenn dann ein anderer Thread schreibt, ist die Ausgabe eben fehlerhaft.
123456789
User
Beiträge: 3
Registriert: Mittwoch 9. Juni 2010, 16:32

hallo,
und danke für eure Erklärungen.
Ich hatte aber wirklich das Problem, dass ich überhaubt keine Ausgeben erhalten habe. Vermutlich lag das an einem anderen Problem.

thx,
Antworten