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

如何在外部关闭.txt文件时触发Python函数执行?

解决方案

修复subprocess方案

你之前用subprocess报错是因为Windows没有open命令,直接指定记事本程序即可:

import subprocess

def on_file_closed():
    print("外部文件已关闭")

path2file = "path/to/your/file.txt"
# 直接调用记事本打开目标文件
process = subprocess.Popen(['notepad.exe', path2file])
# 等待记事本进程结束
process.wait()
on_file_closed()

这个方法直接启动记事本进程,wait()会阻塞直到记事本关闭,之后自动执行指定函数。

兼容os.startfile的方案(适用于不确定关联程序的场景)

如果必须用os.startfile()启动文件,可以用psutil跟踪打开该文件的进程,等待进程结束后执行函数:

  1. 先安装psutil:pip install psutil
  2. 代码实现:
import os
import psutil

def on_file_closed():
    print("外部文件已关闭")

path2file = os.path.abspath("path/to/your/file.txt")
# 用os.startfile打开文件
os.startfile(path2file)

# 遍历进程,找到打开目标文件的进程
def get_target_process(file_path):
    for proc in psutil.process_iter(['pid', 'open_files']):
        try:
            for open_file in proc.open_files():
                if open_file.path == file_path:
                    return proc
        except (psutil.AccessDenied, psutil.NoSuchProcess):
            continue
    return None

target_process = get_target_process(path2file)
if target_process:
    target_process.wait()
    on_file_closed()
else:
    print("未找到打开目标文件的进程")

关于你之前win32file的错误原因

ReadDirectoryChangesW需要传入目录的句柄,不是单个文件的句柄,你之前传了文件句柄所以报参数错误。就算改成目录句柄,也需要额外过滤目标文件的事件,不如直接跟踪进程的方式准确可靠。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 06:45:25