You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于Dropbox-Uploader的monitor触发Python后续处理逻辑?

解决Dropbox文件夹监控触发后续Python逻辑的问题

方法一:用subprocess实时捕获监控输出,触发单次逻辑

直接用Python的subprocess.Popen启动监控命令,实时读取输出,检测到变更时执行后续操作,同时加标记避免重复触发。

import subprocess
import time

# 标记是否已处理过当前变更,防止重复执行
has_processed = False

# 启动监控进程,捕获输出
monitor_proc = subprocess.Popen(
    ["dropbox_uploader.sh", "monitor", "/Lancaster"],
    stdout=subprocess.PIPE,
    stderr=subprocess.PIPE,
    text=True
)

while True:
    line = monitor_proc.stdout.readline()
    if not line:
        break  # 进程结束时退出循环
    
    # 根据实际监控输出调整判断条件,比如输出含"changed"就判定为变更
    if "changed" in line.lower() and not has_processed:
        has_processed = True
        # 执行后续逻辑:下载Updater.txt
        # 这里替换成你调用dropbox_uploader下载文件的命令/函数
        subprocess.run(["dropbox_uploader.sh", "download", "/Lancaster/Updater.txt", "./Updater.txt"])
        # 解析文件并调用处理函数
        with open("./Updater.txt", "r") as f:
            content = f.read()
            Searching_By_Problem_Name(content)
    
    # 监控回到 idle 状态时,重置标记,等待下一次变更
    elif "idle" in line.lower():
        has_processed = False
    
    time.sleep(0.1)

# 退出时终止监控进程
monitor_proc.terminate()

方法二:后台运行监控,轮询日志触发逻辑

把监控命令的输出重定向到日志文件,Python脚本轮询日志的新增内容,检测到变更时执行操作。

  1. 先在后台启动监控:
nohup dropbox_uploader.sh monitor /Lancaster > dropbox_monitor.log 2>&1 &
  1. Python轮询逻辑:
import time
import os

# 记录上次读取的日志大小,避免重复处理
last_log_size = 0
log_file = "dropbox_monitor.log"

while True:
    if os.path.exists(log_file):
        current_size = os.path.getsize(log_file)
        if current_size > last_log_size:
            # 读取新增的日志内容
            with open(log_file, "r") as f:
                f.seek(last_log_size)
                new_lines = f.read()
                if "changed" in new_lines.lower():
                    # 下载并处理文件
                    subprocess.run(["dropbox_uploader.sh", "download", "/Lancaster/Updater.txt", "./Updater.txt"])
                    with open("./Updater.txt", "r") as uf:
                        Searching_By_Problem_Name(uf.read())
            last_log_size = current_size
    time.sleep(3)  # 每3秒轮询一次,可按需调整间隔

核心注意事项

  • 避免重复执行:通过状态标记或日志偏移量,确保每次文件夹变更只触发一次后续逻辑,不会因为监控输出的重复行反复下载处理。
  • 匹配实际输出:要根据dropbox_uploader.sh monitor的真实输出内容调整判断条件(比如实际输出可能是"Directory /Lancaster modified",就对应匹配这个字符串)。
  • 进程清理:用subprocess启动监控时,记得在脚本退出时终止进程;后台运行的监控进程,不用时可以用kill命令清理。

内容的提问来源于stack exchange,提问作者GrifferScott

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 08:20:50