2013-04-07 2 views
8

Es gibt viele print Funktion (python 2.7) in meinem Programm. Kann ich irgendwie ein paar Zeilen hinzufügen, dann kann die gesamte Ausgabe zu stderr umgeleitet werden? Was ich will, ist Python-Codes, aber nicht Linux-Pipeline.In Python, kann ich die Ausgabe der Druckfunktion zu stderr umleiten?

Zum Beispiel mein Programm ist wie:

print 'hello world' 

würde ich einige Codes wie hinzufügen möchte:

redirect_output_to_stderr() 
print 'hello world' 

Dann wird die gesamte Ausgabe kann zu stderr umgeleitet werden.

Ich weiß, print >> sys.stderr, 'hello world' kann mein Ziel erreichen, aber ist es eine Möglichkeit, die verhindern kann, die bestehenden Codes zu ändern?

+1

Der _only_ Weg, um dieses _ohne modifizierende zu tun Der Code_ verwendet die Umleitungsbefehle einer Shell. –

+0

Oh, ich denke, was ich brauche, ist die Änderung der vorhandenen 'print'-Funktionen zu verhindern. Vielen Dank für das erwähnte :) – waitingkuo

Antwort

7

Tun Sie dies in Ihrer Methode:

import sys 
sys.stdout = sys.stderr 
2

Neudefinition der print Funktion von Python ist 3+. Sie können jedoch sys.stdout in std.stderr ändern.

See: another question

+2

Sie * können * print 'in 2,7 neu definieren, wenn Sie' von __future__ Import print_function 'tun. – lvc

+0

@lvc Wusste das nicht. Die Änderung von 'stdout' ist kürzer als die Neudefinition von Funktionen. – kravemir

16

In Python 2.7 Sie tun können:

import sys 

print >> sys.stderr, "To stderr." 

Oder Sie können das Verhalten von 3.x importieren:

from __future__ import print_function 
import sys 

print('To stderr.', file=sys.stderr)