ソフトウェアにタイマーを組み込む

ソフトウェアにタイマーのようなものを仕込みたい。
例えば、ある時間が経過すると何かが発動するようなもの。用途はいろいろ考えられるが、ユーザーに提供するお試し版ソフトウェアをある期日まで使用可能とし、それ以降は起動できないようにする、とか。悪意がある使い方は考えていない。

ここでは、起動したときの日付けを調べて、事前に設定した期日よりも前ならば画面を起動し、後ならば画面を起動しない、という動作をするコードを書く。

datetimeモジュールを使う。datetimeモジュールによって得られるオブジェクトは、例えば、

$ python
>>> import datetime
>>> print datetime.datetime(2001,01,01)
2001-01-01 00:00:00

のようになる。オブジェクト同士で比較ができるので、日時が過ぎたか過ぎてないかの判断に使える。

簡単な実装例としては、以下のようになる。

# today is 2012,04,25
import wx
import datetime

t0 = datetime.datetime(2001,01,01)  #この場合期限切れになる。
#t0 = datetime.datetime(2020,01,01) #この場合まだ期限前。

class MyApp(wx.App):
    def OnInit(self):
        wx.MessageBox("Hello", "wxApp")
        return True

if __name__ == "__main__":
    t1 = datetime.datetime.now()  #実行した日付
    if t1 < t0:
        app = MyApp(False)
        app.MainLoop()
    else:
        print "This license have expired."

上のコードで、「t0」が指定する期日となる。このスクリプトを実行した日が、t0で指定した期限前だと下の画面が起動する。つまり、正常動作する場合。

実行した日が、t0で指定した期限後だと画面は立ち上がらずに、「This license have expired.」というメッセージを表示して終了する。つまり、正常動作しない場合。


参考ブログ:http://abalone.ununu.org/archives/276