2017-05-28 2 views
0

Ich benutze Python2.7 und ich möchte die Funktion: contextlib.redirect_stdout. Ich meine, ich möchte die Ausgabe bestimmter Funktionen (nicht alle Programme) umleiten. Das Problem ist - nur Python3 unterstützt "context.redirect_stdout" und kein Python2.7.contextlib.redirect_stdout in Python2.7

Jemand weiß, wie kann ich die gleiche Funktion in Python2.7 oder die gleiche Idee zu implementieren?

Vielen Dank im Voraus

+0

https://contextlib2.readthedocs.io/en/stable/ – user1685095

Antwort

0

So etwas sollte die Arbeit tun, wenn Sie nicht besorgt sind über das gleiche Kontext-Manager-Objekt wiederverwenden.

import sys 
import contextlib 

@contextlib.contextmanager 
def redirect_stdout(target): 
    original = sys.stdout 
    sys.stdout = target 
    yield 
    sys.stdout = original 
+0

Ist es das ganze Programm sdtout ändern? weil ich einige Threads im selben Prozess habe .. – Matan

+0

Es funktioniert mehr oder weniger das gleiche wie 'redirect_stdout' aus' Contextlib' von Python 3, wessen Dokumente [sagen, dass es nicht für Anwendungen mit Threads geeignet ist] (https: // docs .python.org/3/library/contextlib.html? highlight = kontextlib.redirect_stdout # contextlib.redirect_stdout). Ich habe es nicht getestet, aber es sollte 'stdout' global für alle Threads umleiten. Ich bin mir nicht bewusst, dass es nur im aktuellen Thread umgeleitet werden kann. – elcr