2011-12-06 12 views
6

私は、与えられた2つの時間の間に実行する必要のあるPythonスクリプトに取り組んでいます。 schedモジュールのビルドを使用する必要があります。このスクリプトは、Python 2.7を持つマシン上で直接実行して、構成時間を短縮する必要があるためです。与えられた時間に実行するためにschedモジュールを使用する

いくつかの変数は実行時間の設定を定義します。set_timer_start=0600set_timer_end=0900HHMMに書かれています。私は適切な時にスクリプトを停止することができます。

schedがどのように機能するのかよく分かりませんが(pythonのドキュメントページは私にはあまり意味がありません)、私の理解するところでは、それは日付/時間(エポック)所定時間(HHMM)で実行します。

スケジューラの使い方やスケジューラの使用方法に関する例(リンク)は誰でも教えてください。おそらく次の実行日時を計算できますか?

答えて

9

私はあなたの必要条件を満たしていれば、ループが実行されるたびに待ち行列にタスクを再入力するループが必要です。

# This code assumes you have created a function called "func" 
# that returns the time at which the next execution should happen. 
s = sched.scheduler(time.time, time.sleep) 
while True: 
    if not s.queue(): # Return True if there are no events scheduled 
     time_next_run = func() 
     s.enterabs(time_next_run, 1, <task_to_schedule_here>, <args_for_the_task>) 
    else: 
     time.sleep(1800) # Minimum interval between task executions 

ただし、スケジューラを使用するのは - IMO - overkillingです。たとえば、基本的な実装は次のようになります。

from datetime import datetime as dt 
while True: 
    if dt.now().hour in range(start, stop): #start, stop are integers (eg: 6, 9) 
     # call to your scheduled task goes here 
     time.sleep(60) # Minimum interval between task executions 
    else: 
     time.sleep(10) # The else clause is not necessary but would prevent the program to keep the CPU busy. 

HTH!

+0

あなたはちょうど私の一日を作りました、私はバックアップとして最初のものを保つ(私の上司が他の計画を持っている場合に) – HTDutchy

+3

@ s4uadmin - それはあなたにとって有益でした。私のことは** start = 23、stop = 01のようなものを入力して分を考慮しないと失敗するという、非常に基本的な**実装です。しかし、 'if x in range'を関数' func(x) 'で置き換えることで、それを改善するのは自明です。あなたの必要に応じて' True'または 'False'を返します。 :) – mac