2017-04-16 5 views
0

私はバックグラウンドで常時動作する小さなスクリプトを持っています。私たちは真夜中を過ごすたびに何かしたい。スクリプトはsleep関数を使用しているため、00:00:00の時刻に起きているかどうかは分かりません。Python:私たちは深夜を過ごしました

last_time= time.now() 
while True: 
    if last_time < midnight && midnight < time.now(): 
     # do stuff 
     last_time= time.now() 
    sleep(some time) 

をしかし、私は、if文で適切な行をコーディングする方法を知りませんでした。だから私は、このようなコードを持つように考えていました。

+4

なぜcronジョブを使用しないのですか? –

+2

Pythonでは論理的で、 '&& 'ではなく' and'です。 –

答えて

1

datetimeモジュールを使用すると、現地時間をdatetimeオブジェクトとして取得できます。そのオブジェクトにはその日が含まれているので便利です。それがいつ変わるかをただチェックしてください。

import datetime 
import time 

last_day = datetime.datetime.now().day 
while True: 
    day = datetime.datetime.now().day 
    if day != last_day: 
     last_day = day 
     do_your_work() 
    time.sleep(some_time) 
0

時計の時間がちょうど1時間/分/秒である場合は、これを確認する1つの方法は、新しい時間が古い時間より短いかどうかを確認することです。時間は23:59:59未満です。

もちろん、タイムハンドリングは面倒で恐ろしいもので、例外もあります。特に、秋の時計の変更に遅れた場合はどうでしょうか?

もっと頑強な解決策は、日付を変更したかどうかを確認することです。日付が変更されずに真夜中を過ぎる例はないと考えることができます。

0

だから私は、私は特定の事柄のタイムゾーンを維持しようとしたこの種のものを行なったし、それはので、ここで私をたくさん助けた最後の時間は、私が試してみてくださいしたいものです。ここではpytzライブラリを使用しているので、それをインストールする必要があります。次に、必要な時間帯に変更することもできます。

from datetime import datetime, time 
from time import sleep 
import pytz 


def get_times(): 
    my_timezone = pytz.timezone('America/Los_Angeles') 
    last_time = my_timezone.normalize(datetime.now(tz=my_timezone)) 
    midnight = my_timezone.localize(datetime.combine(last_time.date(), time.max)) 
    return last_time, midnight 


def main(): 
    last_time, midnight = get_times() 

    while True: 
     if last_time > midnight: 
      # It's passed midnight we need to run it 
      # do work here... 
      # now we need to update midnight to todays midnight 
      last_time, midnight = get_times() 
     else: 
      # we shouldn't run the work just update last time 
      last_time, _ = get_times() 
     sleep(10) 

if __name__ == '__main__': 
    main() 
関連する問題