如何将文件内容作为判断条件控制Python循环脚本启停?
问题原因
- 条件判断逻辑错误:
while file.read == 1中read是文件对象的方法,你没有加括号调用,相当于直接判断方法对象和整数1是否相等,结果永远为False,所以循环不会触发。 - 文件指针位置错误:你向文件写入"1"后,文件指针停在了内容末尾,此时直接调用read方法会从末尾开始读取,得到的是空字符串,就算正确调用read也拿不到写入的内容。
- 类型不匹配:read返回的是字符串类型,不能直接和整数1做相等判断,需要和字符串"1"对比或者转成整数后对比。
- 状态检测逻辑缺失:你只在进入循环前读取一次文件内容,后续循环不会重新读取文件,就算停止脚本修改了文件内容,主循环也检测不到变更。
修复后的主循环代码(保留文件标记方案)
import time import random from pynput.keyboard import Key, Controller keyboard = Controller() # 初始化标记为运行状态 with open("file.txt", "w") as f: f.write("1") while True: # 每次循环重新读取标记状态 with open("file.txt", "r") as f: run_flag = f.read().strip() if run_flag != "1": break # 执行按键逻辑 keyboard.press("d") time.sleep(random.randrange(24075, 24221)/10000) keyboard.release("d") keyboard.press("s") time.sleep(random.randrange(24075, 24221)/10000) keyboard.release("s")
原停止脚本可以不用修改,直接正常使用即可。
更简化的实现方案(无需文件操作)
AutoKey自带全局变量存储能力,可以直接在不同脚本间共享状态,不需要读写本地文件,性能更高也不会出现文件IO相关的bug。
主循环脚本
import time import random from pynput.keyboard import Key, Controller keyboard = Controller() # 写入全局运行标记 store.set_global_value("loop_running", True) while store.get_global_value("loop_running"): keyboard.press("d") time.sleep(random.randrange(24075, 24221)/10000) keyboard.release("d") keyboard.press("s") time.sleep(random.randrange(24075, 24221)/10000) keyboard.release("s")
停止脚本
store.set_global_value("loop_running", False)
内容的提问来源于stack exchange,提问作者Ernest Jorba
相关产品推荐
相关产品推荐

