2013-04-07 1 views
8

В моей программе есть функция print (python 2.7). Есть ли способ добавить несколько строк, тогда все выходные данные могут быть перенаправлены на stderr? То, что я хочу, это коды python, но не конвейер linux.В python я могу перенаправить вывод функции print в stderr?

Например, моя программа, как:

print 'hello world' 

Я хотел бы добавить некоторые коды, как:

redirect_output_to_stderr() 
print 'hello world' 

Тогда все выходные данные могут быть перенаправлены на stderr.

Я знаю, что print >> sys.stderr, 'hello world' может достичь моей цели, но может ли он каким-либо образом предотвратить изменение существующих кодов?

+1

_только_ способ сделать это _without модифицирование код_ должен использовать команды перенаправления оболочки. –

+0

О, я думаю, что мне нужно предотвратить изменение существующих функций 'print'. Спасибо за упомянутое: – waitingkuo

ответ

7

ли это в вашем методе:

import sys 
sys.stdout = sys.stderr 
2

Переопределение print является особенностью Python 3+. Однако вы можете изменить sys.stdout на std.stderr.

См: another question

+2

Вы * можете * переопределить 'print' в 2.7, если вы делаете' из __future__ import print_function'. – lvc

+0

@lvc Не знал этого. Все еще изменение 'stdout' короче переопределения функции. – kravemir

16

В Python 2.7 вы можете сделать:

import sys 

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

Или вы можете импортировать поведение от 3.x:

from __future__ import print_function 
import sys 

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