我最近创建了一个python项目,通过在主机文件中进行更改来阻止Youtube URL。我还使用了任务调度程序来自动运行程序,只要我打开我的电脑。
问题:
所以我想在这里做的是实现一个功能,在特定时间段后自动删除Youtube上的限制,比如晚上9点之后。我做了一个"如果——否则"(注释部分在我的代码)准备这个目的,但没有使用它,因为我不知道如何做到这一点。我想到使用"datetime"但不知道如何在这里实现它。下面是代码:
#Using task Scheduler to automatically enable the programme on the startup of my computer
#import datetime
sites_to_block = ["www.youtube.com"]
hosts_path = r"C:WindowsSystem32driversetchosts"
redirect = "127.0.0.1"
def block():
#if datetime.now() < end_time:
print("block sites")
with open(hosts_path , 'r+') as hostsfile:
hosts_content = hostsfile.read()
for site in sites_to_block:
if site not in hosts_content:
hostsfile.write(redirect + " " + site + "n")
#The following will be the code after the blocktime specified by the user is over.
'''else:
print('unblock sites')
with open(hosts_path,'r+') as hostsfile:
lines = hostsfile.readlines()
hostsfile.seek(0)
for line in lines:
if not any(site in line for site in sites_to_block):
hostsfile.write(line)
hostsfile.truncate()
'''
if __name__ == "__main__":
block()
我没有一个很好的经验,当它涉及到使用datetime模块。如果我们可以实现使用datetime,请告诉我如何做。否则,如果你知道的话,请分享使用其他模块的其他方法。
谢谢你,我真的很感谢你读这篇文章:)
你可以尝试这样做:
import datetime as dt
# the blocked time intervals
intervals = [
[dt.time(hour=0), dt.time(hour=8)],
[dt.time(hour=21), dt.time(hour=0)],
]
# check if a pobe time is in an interval
def is_in_interval(start: dt.time, stop: dt.time, probe: dt.time) -> bool:
if start < stop:
return bool(start <= probe and probe < stop)
elif stop < start:
return bool(start <= probe or probe < stop)
raise Exception("start and stop are equal") # create your own exception
current_time = dt.datetime.now().time()
for interval in intervals:
print(is_in_interval(interval[0], interval[1], current_time))