以下に示すように、これは私が作成したスクリプトのコピーです。誰かが私のcurrenttime
タスクを改善/修正するのを手伝ってくれませんか。
基本的に、日中は定期的に 3 分ごとに test を呼び出します +-60 秒ごとに、次のタスクを実行することになっています。
- 23:30:00 から 23:40:00 の間のどこでも、clearscreen が false に変わります
- 23:40:00 から 23:50:00 の間のどこでも、clearscreen が false かどうかをチェックし、そうである場合は特定のファイルをクリアし、すぐに clearscreen を false に設定します。
23:50:00 から 01:30:00 の間のどこでも、時間をチェックする以外に何もせずにアイドル状態になります。
from datetime import date, timedelta from sched import scheduler from time import time, sleep, strftime import random clearscreen = 0 def periodically(runtime, intsmall, intlarge, function): global clearscreen ## Get current time currenttime = strftime('%H:%M:%S') ## while currenttime is anywhere between 23:40 and 23:50 then... while currenttime > '23:30:00' and currenttime < '23:40:00': ## Update time currenttime = strftime('%H:%M:%S') print ("""23:30:00 to 23:40:00 | %s""" % (currenttime)) sleep(1) ## If clearscreen = false then... if clearscreen == False: ## Set clearscreen to true to enable the next part work and to disable this part until the next day. clearscreen = True print "changed to true" ## If currenttime is anywhere between 23:50 and 23:59 then... while currenttime > '23:40:00' and currenttime < '23:50:00': ## Update time currenttime = strftime('%H:%M:%S') print ("""23:40:00 to 23:50:00 | %s""" % (currenttime)) sleep(1) if clearscreen == True: ## clear stuff here print "cleared" ## Change clearscreen to to stop it running clearscreen = False print "changed to false" ## Only allow run_periodically during 01:30 and 23:30 if clearscreen == False: while currenttime > '23:50:00' and currenttime < '23:59:59': ## Update time currenttime = strftime('%H:%M:%S') print ("""23:50:00 to 23:59:59 | %s""" % (currenttime)) sleep(1) while currenttime > '00:00:00' and currenttime < '01:30:00': ## Update time currenttime = strftime('%H:%M:%S') print ("""00:00:00 to 01:30:00 | %s""" % (currenttime)) sleep(1) runtime += random.randrange(intsmall, intlarge) s.enter(runtime, 1, function, ()) s.run() def test(): print "test function" while True: periodically(180, -60, +60, test)
どんな助けでも大歓迎です。
@abarnert の編集
ループに関しては、これは関数が行うべきことです:
23:3x:xx - While loop initiated as currenttime fits the while loop's conditions (time is inbetween 23:30:00 and 23:40:00)
23:3x:xx - clearscreen is false, setting it to true.
23:3x:xx to 23:40:00 - currenttime is updated every 1 second(s)
23:40:01 - While loop ended as currenttime no longer fits the while loop's conditions (time is outside of 23:30:00 and 23:40:00)
23:40:01 - While loop initiated as currenttime fits the while loop's conditions (time is inbetween 23:40:00 and 23:50:00)
23:40:01 - clearscreen is true, doing some stuff and then changing clearscreen to false
23:40:01 to 23:50:00 - currenttime is updated every 1 second(s)
23:50:01 - While loop ended as currenttime no longer fits the while loop's conditions (time is outside of 23:40:00 and 23:50:00)
23:50:01 - While loop initiated as currenttime fits the while loop's conditions (time is inbetween 23:50:00 and 23:59:59)
23:50:01 to 23:59:59 - currenttime is updated every 1 second(s)
00:00:00 - While loop ended as currenttime no longer fits the while loop's conditions (time is outside of 23:50:00 and 23:59:59)
00:00:00 - While loop initiated as currenttime fits the while loop's conditions (time is inbetween 00:00:00 and 01:30:00)
00:00:00 and 01:30:00 - currenttime is updated every 1 second(s)
00:00:00 - While loop ended as currenttime no longer fits the while loop's conditions (time is outside of 00:00:00 and 01:30:00)
あなたは、私が currenttime を繰り返し更新し、次に印刷し、次にスリープすると言いました。この「問題」をどのように回避しますか?
に関しては、global clearscreen
あなたが何を意味するのかわかりません。「ロックがかかっていません」
私は Windows を実行しているので、signal.setitemer は使用できません。また、スクリプト用に特定の値/変数をメモリに格納する必要があるため、Windows でスケジュールされたタスクは適切ではありませんか?
モジュールを使用してサンプルコードを作成しましたsched
が、機能しません。また、機能させる方法がわかりません。また、かなり混乱しています。私はまだ学んでいて、かなり混乱しています。