Python 如果控制台中打印了内容,则打印
我想监控给定Python函数(对于那些知道它的人,Python 如果控制台中打印了内容,则打印,python,printing,timer,Python,Printing,Timer,我想监控给定Python函数(对于那些知道它的人,GridSearchCV来自机器学习包Scikit Learn)在执行过程中的进度。为此,如果函数有一个参数verbose,我可以将verbosity设置为1或10,无论什么。但是,我也希望有一些时间监控。我的想法是,每次在控制台中打印内容时,都在控制台上打印一个计时器(在这种情况下,打印将来自GridSearchCV的详细信息的激活),让我们称之为打印功能 我的问题如下: Python中有没有一种方法可以在控制台中打印某些内容时执行程序 我在
GridSearchCV
来自机器学习包Scikit Learn)在执行过程中的进度。为此,如果函数有一个参数verbose
,我可以将verbosity设置为1或10,无论什么。但是,我也希望有一些时间监控。我的想法是,每次在控制台中打印内容时,都在控制台上打印一个计时器(在这种情况下,打印将来自GridSearchCV
的详细信息的激活),让我们称之为打印功能
我的问题如下:
- Python中有没有一种方法可以在控制台中打印某些内容时执行程序
- 我在这里看到的一个困难是,当我执行所有这些指令时(函数
,GridSearchCV
),我担心会发生的是打印函数
将被完全执行,然后所有计时器将在最后打印出来。有没有办法避免这种情况GridSearchCV
sys.stdout
重定向到您自己的自定义类来实现,该类可以将信息添加到输出中。下面是一个如何实现这一目标的例子。我传入一个datetime对象,用作计算经过了多少时间的引用。然后,当将任何内容打印到标准输出时,将调用CustomStdout.write()
,然后我计算自参考时间以来经过的时间,并将该信息插入正在显示的文本中,然后使用初始标准输出显示它
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
如果
GridSearchV()
使用检查GridSearchCV()
是否提供了正确的进度API(例如,它是否接受定期调用的回调(例如),或者它是否将进度信息打印到您可以提供的套接字和管道中),则它将不起作用。