打印控制台中是否打印了某些内容

时间:2016-01-10 14:53:55

标签: python printing timer

我想在执行期间监视给定Python函数的进度(对于那些知道它的函数,来自机器学习包Scikit Learn的GridSearchCV)。要做到这一点,假设函数有一个参数verbose,我可以将详细程度设置为1或10,无论如何。但是,我也希望有一些时间监控。我的想法是每次在控制台中打印某些东西时在控制台上打印一个计时器(在这种情况下,打印将来自GridSearchCV的详细程度的激活),让& #39; s称之为printing function

我的问题如下:

  • 在控制台中打印某些内容时,Python中是否有办法执行程序?
  • 我在这里看到的一个难点是,当我执行所有这些指令(函数GridSearchCVprinting function)时,我担心会发生GridSearchCV将完全执行,然后所有的计时器将在最后打印。有没有办法避免这种情况?

1 个答案:

答案 0 :(得分:0)

这可以通过将window.onbeforeunload = function() { var x = doMyStaff(); return x; }; function doMyStaff(){ console.log(new Date()); return "Check console there are Date!" } 重定向到您自己的可以将信息添加到输出中的自定义类来实现。以下是如何实现这一目标的示例。我传入一个datetime对象作为参考来计算已经过了多长时间。然后当任何内容打印到stdout时,sys.stdout被调用,然后我评估自参考时间以来经过了多长时间并将该信息插入到正在显示的文本中,然后使用初始标准输出显示它。

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'