Ausgabeumlenkung mit Python unter windows

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
dakn84

Freitag 29. Oktober 2004, 07:55

Hi zusammen,

ich möchte einen build prozess zum einen in einem logfile speichern aber auch alles gleichzeitig auf dem monitor ausgeben.

also das mit dem logfile funktioniert einwandfrei, aber das ausgeben auf dem bildschirm klappt nicht :cry: .

Wer kann mir da helfen ?????

Gruß
NOTZE
User
Beiträge: 106
Registriert: Mittwoch 21. Januar 2004, 20:28

Freitag 29. Oktober 2004, 08:33

Wenn du jetzt noch sagst was dein _genaues_ problem ist kann man dir sicher auch helfen :roll:
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

Freitag 29. Oktober 2004, 11:28

Hi dakn84,

bei den Codesnippets habe ich eine Linebufferklasse gepostet:
http://python.sandtner.org/viewtopic.php?t=1922
Die ist genau für solche sachen gedacht und sollte auch unter Windows funktionieren.


Gruß

Dookie
[code]#!/usr/bin/env python
import this[/code]
Sorgenkind
User
Beiträge: 34
Registriert: Samstag 24. Juli 2004, 19:25
Kontaktdaten:

Freitag 29. Oktober 2004, 12:34

Würds viel einfacher machen:

Code: Alles auswählen

import sys
class Umleiter:
    def __init__(self,f):
        self.stdout=sys.stdout
        self.file=file(f,"a+")
    def write(self,x):
        self.file.write(x)
        self.stdout.write(x)
    def __getattr__(self,x):
        return getattr(self.stdout,x)

sys.stdout=Umleiter("log.txt")

print "Test"
dakn84

Freitag 29. Oktober 2004, 15:30

Hi,

Wenn du jetzt noch sagst was dein _genaues_ problem ist kann man dir sicher auch helfen.

Also, ich erstelle mit Scons ein Build. Der Build Prozess soll in ein Logfile geschrieben werden, aber auch gleichzeitig auf dem Bildschirm ausgegeben werden.

Der Prozess wird in das Logfile geschrieben, nur die Ausgabe in der Cmd funzt nicht.

Unter Linux gibt es den Befehl 'tee' damit beides erreicht wird. Jetzt will ich wissen wie das klappt.

Gruß
Antworten