安排Python程序在给定时间段内休眠 为True时: now=datetime.datetime.now(); 如果now.hour>=22且now.hourRUN_UB: 返回lbok或ubok 其他: 返回lbok和ubok #辅助函数,用于确定距离现在运行的距离 def get_wait_secs(): #获取当前日期时间 cd=datetime.datetime.now() #使用*今天的*跑步创建日期时间 ld=datetime.datetime.combine(datetime.date.today(),运行\u LB) #创建直到*今天*跑步的时间增量 td=ld-cd #忽略td天数(可能为负值),返回td.seconds(始终为正值) 返回td.s 尽管如此: 如果您应该运行(): 打印(“--做点什么--”) 其他: wait_secs=get_wait_secs() 打印(“睡眠%d秒…”%wait_secs) 时间。睡眠(等待秒)
这段代码应该使我的整个程序在晚上10点睡觉,在凌晨3点醒来。我的问题是。。这样行吗?我试着运行它。。但是我不能改变我的系统/计算机时间。。所以我不能检查。 我发布此问题的原因是因为我的编码使用了datetime.date.tday和datetime.datetime,后者调用当前日期 再次。。我希望我的程序在晚上10点之前运行,在晚上10点到凌晨3点之间睡眠,并在凌晨3点之后重新运行 有人能检查一下这是不是正确的方法吗 考虑(为了清晰起见,需要额外详细):安排Python程序在给定时间段内休眠 为True时: now=datetime.datetime.now(); 如果now.hour>=22且now.hourRUN_UB: 返回lbok或ubok 其他: 返回lbok和ubok #辅助函数,用于确定距离现在运行的距离 def get_wait_secs(): #获取当前日期时间 cd=datetime.datetime.now() #使用*今天的*跑步创建日期时间 ld=datetime.datetime.combine(datetime.date.today(),运行\u LB) #创建直到*今天*跑步的时间增量 td=ld-cd #忽略td天数(可能为负值),返回td.seconds(始终为正值) 返回td.s 尽管如此: 如果您应该运行(): 打印(“--做点什么--”) 其他: wait_secs=get_wait_secs() 打印(“睡眠%d秒…”%wait_secs) 时间。睡眠(等待秒),python,linux,unix,Python,Linux,Unix,这段代码应该使我的整个程序在晚上10点睡觉,在凌晨3点醒来。我的问题是。。这样行吗?我试着运行它。。但是我不能改变我的系统/计算机时间。。所以我不能检查。 我发布此问题的原因是因为我的编码使用了datetime.date.tday和datetime.datetime,后者调用当前日期 再次。。我希望我的程序在晚上10点之前运行,在晚上10点到凌晨3点之间睡眠,并在凌晨3点之后重新运行 有人能检查一下这是不是正确的方法吗 考虑(为了清晰起见,需要额外详细): 导入时间、日期时间 #创建时间界限——
导入时间、日期时间
#创建时间界限——程序应在run_LB和run_UB之间运行
RUN_LB=datetime.time(小时=22)#晚上10点
RUN_UB=datetime.time(小时=3)#凌晨3点
#Helper函数来确定当前是否应该运行
def应该运行():
#获取当前时间
ct=datetime.datetime.now().time()
#比较当前运行时间界限
lbok=运行_LB=连续油管
#如果边界覆盖24小时工作日,则使用不同的检查逻辑
如果RUN_LB>RUN_UB:
返回lbok或ubok
其他:
返回lbok和ubok
#辅助函数,用于确定距离现在运行的距离
def get_wait_secs():
#获取当前日期时间
cd=datetime.datetime.now()
#使用*今天的*跑步创建日期时间
ld=datetime.datetime.combine(datetime.date.today(),运行\u LB)
#创建直到*今天*跑步的时间增量
td=ld-cd
#忽略td天数(可能为负值),返回td.seconds(始终为正值)
返回td.s
尽管如此:
如果您应该运行():
打印(“--做点什么--”)
其他:
wait_secs=get_wait_secs()
打印(“睡眠%d秒…”%wait_secs)
时间。睡眠(等待秒)
但我同意睡眠并不是推迟节目开始的最佳方式。您可以查看Windows上的任务计划程序或Linux上的
cron
。如果无法更改系统时间,请更改代码中的时间。如果now.hour>=22和now.hour<3:
将永远不会计算为True
。使用cron可能会更好,还应该与其他日期时间进行比较,创建开始和结束时间并使用those@jedwards我需要把它改成什么?所以它可以在晚上10点到凌晨3点睡觉?如果我没记错的话,它的睡眠时间也是当天凌晨3点,我想你应该是明天凌晨3点。您可能正在查找datetime.timedelta
。您可以尝试类似于sleep\u at=now+datetime.timedelta(hours=6)
我真的不明白您应该运行的部分。。最后一个if和else做什么。。这对最后的while循环有何影响?should_run()
返回一个布尔值--True
或False
。没有别的了。如果当前时间在RUN_LB
,RUN_UB
范围内,则返回True
,否则返回False
。最后一个if
语句是必需的,以防您以后将边界更改为不包含24小时时钟的值——例如RUN\u LB=datetime.time(hour=1)
和RUN\u UB=datetime.time(hour=5)
——在这种情况下,您需要确保当前时间满足这两个条件。因为您的边界会自动换行,所以只需要满足一个条件。at should_run();方法,它重新运行lbok或ubok else lobk和ubok这是做什么的?lbok=RUN_LBlbok
和ubok
是布尔值lbok=RUN_LB但是,当边界跨越24小时时,不可能同时满足这两个条件。如果开始时间(下限)为22,结束时间(上限)为3,则不存在>22和<3的时间。因此,我们修改了逻辑。如果某个时间满足任一条件,则认为该时间在22-3个时间范围内。时间必须大于22或小于3。如果某个时间满足这些条件之一,那么它就在我们想要运行的窗口内。因此,在一天结束时,should_run()
根据我们是否在(开始时间,结束时间)时间范围内返回一个布尔值。
while True:
now = datetime.datetime.now();
if now.hour >= 22 and now.hour < 3:
print "sleep"
sleep_at = datetime.datetime.combine(datetime.date.today(),datetime.time(3))
sleep_til = (sleep_at - now).seconds
print sleep_til
time.sleep(sleep_til)
print "wake"
else:
print "break"
break
import time, datetime
# Create time bounds -- program should run between RUN_LB and RUN_UB
RUN_LB = datetime.time(hour=22) # 10pm
RUN_UB = datetime.time(hour=3) # 3am
# Helper function to determine whether we should be currently running
def should_run():
# Get the current time
ct = datetime.datetime.now().time()
# Compare current time to run bounds
lbok = RUN_LB <= ct
ubok = RUN_UB >= ct
# If the bounds wrap the 24-hour day, use a different check logic
if RUN_LB > RUN_UB:
return lbok or ubok
else:
return lbok and ubok
# Helper function to determine how far from now RUN_LB is
def get_wait_secs():
# Get the current datetime
cd = datetime.datetime.now()
# Create a datetime with *today's* RUN_LB
ld = datetime.datetime.combine(datetime.date.today(), RUN_LB)
# Create a timedelta for the time until *today's* RUN_LB
td = ld - cd
# Ignore td days (may be negative), return td.seconds (always positive)
return td.seconds
while True:
if should_run():
print("--do something--")
else:
wait_secs = get_wait_secs()
print("Sleeping for %d seconds..." % wait_secs)
time.sleep(wait_secs)