VSCode中Python文件保存后自动运行,如何排查触发原因及关联程序
Python文件保存后自动执行排查方案
一、VSCode侧配置排查
- 先禁用所有第三方VSCode插件,修改文件保存测试是否还会自动执行,如果问题消失,再逐个启用插件定位到触发自动执行的插件,常见的可疑插件有:Code Runner、Run on Save、Auto Run Command、Debug Auto Restart 类插件
- 检查当前工作区的
.vscode/settings.json文件,是否存在emeraldwalk.runonsave、code-runner.runOnSave这类自动运行配置项,删除对应规则后再测试 - 关闭所有已打开的VSCode终端,重启终端后不要手动运行任何脚本,修改文件保存看是否还会触发,排除是之前终端中启动的
nodemon、pytest-watch、entr这类文件变更监听进程未关闭导致的循环触发 - 检查VSCode的debug配置,是否开启了文件变更时自动重启debug的配置,关闭对应配置后测试
二、进程溯源定位触发源
你可以在Python脚本最开头加入以下日志代码,每次脚本被运行时会自动记录触发它的父进程信息,直接定位来源:
import os import time import psutil import pandas as pd current_proc = psutil.Process(os.getpid()) parent_proc = current_proc.parent() # 日志输出到固定路径,避免被移动文件影响 log_path = "auto_run_trigger.log" with open(log_path, "a", encoding="utf-8") as f: f.write(f"===== 触发时间:{pd.Timestamp.now()} =====\n") f.write(f"当前脚本路径:{current_proc.cmdline()[1]}\n") f.write(f"父进程ID:{parent_proc.pid}\n") f.write(f"父进程名称:{parent_proc.name()}\n") f.write(f"父进程执行命令:{parent_proc.cmdline()}\n\n")
不同系统还可以手动查询进程信息:
- Windows:触发自动执行时打开任务管理器,找到对应
python.exe进程,右键选择「打开文件所在的位置」、「转到详细信息」、「查看命令行」即可拿到完整执行链路 - macOS/Linux:触发执行时执行
ps aux | grep python找到对应Python进程ID,再执行pstree -p <进程ID>即可查看父进程树,定位触发来源
三、系统与项目配置排查
- 检查项目根目录下是否有
.pre-commit-config.yaml、Makefile、package.json的scripts、自定义监听脚本等配置,是否存在文件变更时自动执行Python文件的钩子规则 - 检查系统是否配置了定时任务、文件监听服务:Windows的任务计划程序、macOS的launchd、Linux的crontab、inotifywait/fswatch这类监听进程,是否配置了监听
.py文件变更自动执行的规则 - 检查你代码中
create_bash方法生成的bash命令,是否存在启动文件监听、循环触发当前脚本的逻辑,避免是脚本自身执行后启动的子进程监听文件变更导致的循环运行
内容的提问来源于stack exchange,提问作者Allen Huang
相关产品推荐
相关产品推荐

