让python脚本在特定时间内每天运行

时间:2015-06-03 21:05:43

标签: python time

我正在尝试制作一个python脚本(无限循环),每天从早上9点开始工作到23.00左右,这一遍又一遍。我做了一些研究,最后提出了这个代码:

while True:
    if dt.now().hour in range(9, 23):  
        if __name__ == "__main__":

            """ Not important """

            while True:
                try:
                    """ bet_automation contains all the necessary code """

                    bet_automation()

                except Exception as ex:

                    """ Catch all the error of bet_automation() and restart program """

                    print_error(ex)
                    time.sleep(5)
                    if not isinstance(ex, LoginTimeoutException):
                        try:
                            driver = get_driver()
                            filename = str(time.time())
                            driver.get_screenshot_as_file("errors/{}.png".format(filename))
                            with io.open("errors/{}.html".format(filename)) as f:
                                f.write(unicode(driver.page_source))
                        except:
                            pass
                    try:
                        quit_driver()
                    except:
                        pass

    else:
        sys.exit(0)

通过这个,脚本设法从20.00开始并正常工作。即使我之前运行它,它只能在20.00开始工作,这很好,但它不会在21时终止,这很令人困惑。

我很清楚这可能是一个非常容易和愚蠢的问题,但正如我所说,我是最终的初学者。我有一个由专业人士编写的脚本"程序员和我试图编辑它并改进它,我想自己去理解整个过程。

非常感谢每一位见解,

非常感谢,

:)

1 个答案:

答案 0 :(得分:0)

您的代码包含两个循环。首先,外循环。这个基本上是无关紧要的;如果您在9:00到23:00之间的某个时间启动程序,dt.now().hour in range(9, 23)将评估为True,因此代码将进入内部(无限)循环。如果条件评估为False,程序将退出。因此,外部循环体只会被执行一次。

然后,内循环。这个是无限的,一旦输入,代码将永远不会突破它。如果在某个迭代bet_automation()没有抛出异常,它将在下一次迭代期间再次执行。如果在某个迭代中bet_automation() 会抛出错误,它将被捕获并处理,循环将继续。

如果您希望代码在某个时刻停止,您需要检查内部循环内的当前时间,如下所示:

while True:
    try:
         bet_automation()
         if dt.now().hour not in range(9, 23):
             break
(...)