2012-08-26 119 views
0

目前,我可以將信息打印到stdout和stderr,但是我想打印有關進度的信息並將其打印到stdout,stderr和其他地方。這可能嗎?在stdout和stderr之外打印

+1

你想去哪裏打印呢? –

+0

你是說你想*模擬*打印輸出到'stdout','stderr',和*別的地方*? –

+0

是的標準輸出,stderr和其他地方 - 到控制檯。 – Andrew

回答

1

據我所知,輸出到控制檯只能通過stdout和stderr。

你想打印到文件,然後如果你喜歡使用print你可以做到這一點

with open('outfile.txt', 'w') as f: 
     f.write('this is a test') 

或者:

 print >> f, 'this is a test' 

在上面的例子打開一個名爲outfile.txt文件爲w儀式訪問。這意味着任何已經存在的數據將被寫入它的新數據消除。如果你想追加,你可以在a模式下打開文件。有關更多信息,請參見documentation for open()

打開的文件需要關閉,使用with構造爲您負責(如果遇到異常,還會關閉文件)。

+0

原因我想打印進度信息 - 應該打印到該術語。 – Andrew

+1

@Andrew輸出到控制檯只有通過stdout和stderr據我所知。如果沒有,那麼我會很樂意學習新的東西。 – Levon

+0

直接打印到類似unix的機器上的'/ dev/console'可能會起作用,但它不一定是個好主意。 – geoffspear

-1

製作一個名爲寫入方法()類,那麼你可以使用

print 'text' >> Printer() 

到 '文本' 打印到打印機()對象(Python的2.X)或

print('text', file=Printer()) 

在python 3.x

+0

你可以告訴我要寫什麼嗎? (Python 2) – Andrew

+0

任何你想打印的字符串,只需用它替換'text' – lolopop

+1

@pythonm:我會建議子類化'StringIO'(它已經有一個寫入方法)。 –

2

您可以同時使用logging模塊將信息記錄到不同的地方:

import logging 

logger = logging.getLogger('your_logger') 
logger.setLevel(logging.INFO) 

file_handler = logging.FileHandler('errors.log') 
file_handler.setLevel(logging.ERROR) 
logger.addHandler(file_handler) 

stream_handler = logging.StreamHandler() 
stream_handler.setLevel(logging.INFO) 
logger.addHandler(stream_handler) 

logger.warning('I am a warning') 
logger.error('I will be printed, but written to the log file as well') 
logger.info('I am an info message') 
+0

我對日誌模塊並不熟悉,不是通過'stderr'或'stdout'傳遞給控制檯的輸出(如果有的話)? (我需要閱讀該模塊) – Levon

+0

當我將stderr重定向到文件,也重定向記錄器消息 – Andrew

+0

@Levon:我認爲這取決於消息的嚴重性。 – Blender