2013-04-07 55 views
8

Có rất nhiều chức năng print (python 2.7) trong chương trình của tôi. Có cách nào tôi có thể thêm một vài dòng sau đó tất cả các đầu ra có thể được chuyển hướng đến stderr? Những gì tôi muốn là mã python nhưng không phải là đường ống linux.Trong python, tôi có thể chuyển hướng đầu ra của chức năng in tới stderr không?

Ví dụ, chương trình của tôi cũng giống như:

print 'hello world' 

Tôi muốn thêm một số mã như:

redirect_output_to_stderr() 
print 'hello world' 

Sau đó, tất cả các đầu ra có thể được chuyển hướng đến stderr.

Tôi biết print >> sys.stderr, 'hello world' có thể đạt được mục tiêu của mình, nhưng có cách nào có thể ngăn chặn việc sửa đổi các mã đã tồn tại không?

+1

Cách _only_ để làm điều đó _without sửa đổi code_ là sử dụng các lệnh chuyển hướng của trình bao. –

+0

Ồ, tôi đoán những gì tôi cần là ngăn không cho sửa đổi các chức năng 'in' đã tồn tại. Cảm ơn bạn đã đề cập rằng :) – waitingkuo

Trả lời

7

Làm điều này trong phương pháp của bạn:

import sys 
sys.stdout = sys.stderr 
2

Redefinition của print là tính năng của Python 3+. Tuy nhiên, bạn có thể thay đổi sys.stdout thành std.stderr.

Xem: another question

+2

Bạn * có thể * xác định lại 'in' trong 2,7 nếu bạn làm' từ __future__ import print_function'. – lvc

+0

@lvc Không biết điều đó. Vẫn thay đổi 'stdout' ngắn hơn chức năng định nghĩa lại. – kravemir

16

Trong python 2.7 bạn có thể làm:

import sys 

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

Hoặc bạn có thể nhập những hành vi từ 3.x:

from __future__ import print_function 
import sys 

print('To stderr.', file=sys.stderr) 
Các vấn đề liên quan