Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/357.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如果控制台中打印了内容,则打印_Python_Printing_Timer - Fatal编程技术网

Python 如果控制台中打印了内容,则打印

Python 如果控制台中打印了内容,则打印,python,printing,timer,Python,Printing,Timer,我想监控给定Python函数(对于那些知道它的人,GridSearchCV来自机器学习包Scikit Learn)在执行过程中的进度。为此,如果函数有一个参数verbose,我可以将verbosity设置为1或10,无论什么。但是,我也希望有一些时间监控。我的想法是,每次在控制台中打印内容时,都在控制台上打印一个计时器(在这种情况下,打印将来自GridSearchCV的详细信息的激活),让我们称之为打印功能 我的问题如下: Python中有没有一种方法可以在控制台中打印某些内容时执行程序 我在

我想监控给定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(例如,它是否接受定期调用的回调(例如),或者它是否将进度信息打印到您可以提供的套接字和管道中),则它将不起作用。