定时网站拦截程序无法自动解锁及锁定文件内容消失问题求助
问题分析与解决
一、拦截时间到后网站仍锁定的原因及修复
核心问题:程序只执行一次逻辑,不持续监控时间
你的代码里block_websites()函数仅在程序启动时运行一次:
- 如果启动时当前时间早于设定的
end_time,程序只会执行拦截操作,然后直接退出,不会等到时间到点后自动触发解锁。 - 只有当你在超过
end_time之后才启动程序,才会执行解锁逻辑。
其他可能诱因
修改hosts文件后,系统DNS缓存可能还保留旧记录,导致网站仍被拦截。Windows下可以手动执行ipconfig /flushdns刷新缓存。
修复方案
让程序持续运行并定时检查时间,比如加入循环和睡眠:
import time if __name__ == '__main__': while True: block_websites() # 每60秒检查一次,可按需调整间隔 time.sleep(60)
注意:修改Windows的hosts文件需要管理员权限,所以运行程序时要右键选择“以管理员身份运行”,否则解锁操作可能失败。
二、锁定txt文件后内容消失是否正常?
这绝对不是正常现象,你的代码里根本没有对blocked_sites.txt做写入或清空操作:
代码中用r+模式打开文件,这个模式是读写共存,但打开时不会清空文件内容——只有w或w+模式才会在打开时清空文件。
可能的原因
- 测试时的误操作:你可能在其他代码或手动操作中,用
w模式打开过blocked_sites.txt,导致内容被清空。 - 混淆了锁文件与目标文件:
filelock生成的blocked_sites.txt.lock是专门的锁文件,本身就是空的,这是正常的(锁文件仅用来标记文件被占用,不需要存储内容),别把它和你的网站列表文件搞混了。 - 权限问题:如果程序没有足够权限读取
blocked_sites.txt,会出现读取内容为空的情况,但原文件实际内容并没有消失。 - 文件损坏或误删:比如手动删除了文件内容,或者磁盘故障导致文件损坏。
内容的提问来源于stack exchange,提问作者Mynameisaname
相关产品推荐
相关产品推荐

