如何在外部关闭.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跟踪打开该文件的进程,等待进程结束后执行函数:
- 先安装psutil:
pip install psutil - 代码实现:
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
相关产品推荐
相关产品推荐

