[英]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.