You need to enable JavaScript to run this app. 如何将文件内容作为判断条件控制Python循环脚本启停?
优惠活动
大模型
产品
解决方案
定价
更多

如何将文件内容作为判断条件控制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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.11 04:24:01