2010-12-22 3 views
3

Gibt es ein Python-Äquivalent/Pseudo-Äquivalent zu Java OutputStream oder PrintWriter?Python-Äquivalent von Java OutputStream?

Ich möchte in der Lage sein, ein Handle, das entweder einen Stream wie Stdout/sterr, oder eine Datei oder etwas anderes (eine Pipe oder ein Sockel oder eine Dummy-Senke) und abstrahieren, was es ist , also kann ich einfach eine Ausgabe senden.

Wie kann ich das tun?

Antwort

5

„Abstrahieren entfernt welche Art es ist“ geschieht automatisch in Python - es ist "Ente tippen" genannt. Übergeben Sie einfach ein dateiähnliches Objekt an die Funktion, und verwenden Sie die Schnittstelle von dateiähnlichen Objekten.

FWIW, die Standard-Eingabe/Ausgabe/Fehlerströme werden durch stdin, stdout und stderr im sys Modul dargestellt. Verwenden Sie das Modul StringIO, um dateiähnliche Objekte zu erhalten, die Strings lesen und schreiben.

1

Sie brauchen nur ein Objekt, das die Methoden implementiert, die Dateien, Pipes, Streams, etc ... auch implementieren. manchmal zum Beispiel verwende ich diese Klasse, wenn ich mein Python-Programm ablösen will, und ich will sys.stderr/sys.stdout umleiten:

class Log(object): 
    """used for logging for background process""" 
    def __init__(self, f): 
      self.f = f 
    def write(self, s): 
      self.f.write(s) 
      self.f.flush() 
sys.stdout = sys.stderr = Log(open('/tmp/daemonlog', 'a+'))