[英]Print if something is printed in the console
我想在執行過程中監視給定Python函數(對於那些知道它的人,來自機器學習包Scikit Learn的GridSearchCV
)的進度。 為此,在給定的函數具有參數verbose
,我可以將詳細程度設置為1或10。 但是,我也想進行某種時間監視。 我的想法是每次在控制台中打印某些東西時,在控制台上打印一個計時器 (在這種情況下,打印將來自GridSearchCV
的冗長程度的激活),我們稱之為printing function
。
我的問題如下:
GridSearchCV
, printing function
)時,恐怕將會發生的是GridSearchCV
將被完全執行,然后所有計時器將在最后打印。 有辦法避免這種情況嗎? 通過將sys.stdout
重定向到您自己的自定義類(可以將信息添加到輸出中)可以實現。 這是如何實現的示例。 我傳入了一個datetime對象,用作計算多少時間的參考。 然后,當將任何內容打印到stdout時,將調用CustomStdout.write()
,然后評估自參考時間以來經過了多少時間,並將該信息插入正在顯示的文本中,然后使用初始stdout顯示它。
import sys
import time
from datetime import datetime
class CustomStdout():
def __init__(self, start_time=None):
self.stdout = sys.stdout
self.start_time = start_time or datetime.now()
def write(self, text):
elapsed = datetime.now() - self.start_time
text = text.rstrip()
if len(text) == 0:
return
elapsed_str = '[%d.%03d seconds]' % (elapsed.seconds, elapsed.microseconds / 1000.)
self.stdout.write('%s %s\n' % (elapsed_str, text))
print 'Printing before stdout redirect'
# Redirect stdout
sys.stdout = CustomStdout()
print 'Stdout now redirected'
print 'About to sleep 5 seconds'
time.sleep(5)
print 'Slept 5 seconds'
輸出是
Printing before stdout redirect
[0.000 seconds] Stdout now redirected
[0.000 seconds] About to sleep 5 seconds
[5.004 seconds] Slept 5 seconds
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.