【问题标题】:How to periodically check for the current date from within a program?如何在程序中定期检查当前日期?
【发布时间】:2011-09-28 02:12:37
【问题描述】:

我想为某人编写一个类似日历的小型应用程序作为生日礼物(在 Ubuntu 上运行)。它应该做的就是每天显示一张单独的图片,所以每当它被调用时,它应该检查日期并从我提供的集合中选择合适的图片,而且,如果它继续运行,它应该切换到下一张图片第二天开始的时候。

调用时的日期检查不是问题;我的问题与第二种情况有关:我怎样才能让程序通知第二天的开始?我笨拙的方法是让它定期检查当前日期,并在日期发生变化时让它改变显示的图片,但这让我觉得非常迂回而不是特别优雅。

如果你们中的任何人对我如何做到这一点有所了解,请不要犹豫,回复。我的目标是用 Perl 或 Python 编写应用程序,因此非常欢迎有关这两种语言的建议,但也欢迎任何其他建议。

非常感谢您的宝贵时间!

【问题讨论】:

    标签: python perl date calendar


    【解决方案1】:

    您是否考虑过安排脚本的调用?

    对我来说,最好的方法是:

    1.运行脚本有两种选择:

    • run_script
    • run_script --update

    2.安排在某个任务调度器(例如 Cron)中运行的更新每天执行一次。

    3.当您想查看当天的图片时,只需运行不带更新选项的脚本即可。

    如果您希望我扩展其中的任何部分,只需询问即可。

    【讨论】:

    • 我同意 cron 方法。这可能是最干净的一个。另一个将实现某种事件,但需要进行持续检查。
    • @Gandi 谢谢!正如我在回复 barns 的回复时所写的那样,我确实短暂地想到了使用 cron 的可能性(但我没有提到它,我真傻!)。您是否知道一种自动创建 cron 作业的方法,这样我的朋友就不必自己设置了?
    • docs.fubar.si/python-crontab 但我不确定它是否写得好。只是你可以检查的东西。可以从这里下载:pypi.python.org/pypi/python-crontab
    • @Gandi 谢谢,我会调查的!
    【解决方案2】:

    这个问题的答案可能非常依赖于系统。控制程序执行的时间可能取决于系统。在所有 *nix 类型的系统上,我都会使用 cron。假设您使用的是 *nix 系统,那么答案取决于程序实际执行的操作。

    如果它只需要选择一个图像,那么我建议它不要连续运行,而是选择它后自行终止,然后第二天再次运行(关于如何设置cron的教程有很多)。

    但是,如果它具有某种形式的 UI,并且很可能(可能)持续运行几天,那么您可以采用两种方法:

    1. 按原样创建程序,定期轮询当前时间,并进行日期增量比较。 Python timedelta objects 可以在这里提供帮助。这几乎是你的不雅方法。
    2. 另一种解决方案是在您希望更新时从 cron 发送一个信号。这个过程意味着你必须让它知道信号,并响应像 USR1 这样的东西。 The Python docs 与此交谈,但您可以在网上找到许多教程。这种方法也适用于守护程序应用。

    我敢肯定还有很多其他方法,但那些是快速和讨厌的应用程序想到的方法。

    【讨论】:

    • 非常感谢您的回复。在发布这个问题之前,我在精神上短暂地承认了 cron 的存在(我猜我应该提到它......),但我在想,对于我的朋友来说,如果他可以的话,这将是最不麻烦的只需运行程序,也不必设置 cron 作业。有没有办法编写一个安装脚本来自动创建所需的 cron 作业?
    • 您可以以编程方式创建 cron 条目,但除非您确切知道自己在做什么,否则我会对此有点谨慎。定期轮询的问题在于它不必要地使用了资源。那么,在我看来,解决方案要容易得多。当你第一次运行程序时,计算当前时间,计算第二天的午夜,让你的程序在这段时间内休眠,然后醒来,改变图像,再休眠一天。如果程序是事件驱动的,您将需要某种计时器对象,否则,它只能休眠。
    • 谢谢!这确实是一个简单直接的解决方案 - 太棒了:)
    猜你喜欢
    • 1970-01-01
    • 2014-07-01
    • 1970-01-01
    • 2021-04-11
    • 1970-01-01
    • 1970-01-01
    • 2015-02-13
    • 2021-11-13
    相关资源
    最近更新 更多