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

Subprocess路径正确却报FileNotFoundError问题排查求助

问题:调用MMDetection train.py时的FileNotFoundError异常

环境信息

  • SSH环境,配置为PyTorch 2.1、CUDA 12.2、Python 3.10.12
  • 使用subprocess执行MMDetection的train.py脚本

问题现象

  1. 首次执行未手动添加.py后缀的命令:
command = [
    "python",
    f"{cwd}/mmdetection/tools/train.py",
    f"{project_folder}/{model_config_file}",
    "--auto-scale-lr",
    "--work-dir", f"{project_folder}/train_output"
]

subprocess.run(command)

报错:FileNotFoundError: file "/home/MMDetection/script_headvhelmet_test/retinanet_r50_fpn_1x_coco" does not exist.

  1. 手动添加.py后缀后执行命令:
command = [
    "python",
    f"{cwd}/mmdetection/tools/train.py",
    f"{project_folder}/{model_config_file}.py",
    "--auto-scale-lr",
    "--work-dir", f"{project_folder}/train_output"
]

subprocess.run(command)

报错:FileNotFoundError: [Errno 2] No such file or directory: '/home/MMDetection/script_headvhelmet_test/retinanet_r50_fpn_1x_coco_script_headvhelmet_test.py.py'

  1. 打印的model_config_file值为:retinanet_r50_fpn_1x_coco_script_headvhelmet_test.py

问题分析

从报错和打印信息可定位两个核心问题:

  • 第一次执行时,传入的路径缺少.py后缀,但model_config_file本身已带后缀,说明路径拼接或变量赋值过程中出现截断,导致实际传入不带后缀的文件名
  • 第二次手动加.py后出现xxx.py.py,结合变量值可知model_config_file本身已包含.py,但第一次拼接时被错误处理为无后缀名称,大概率是变量赋值时错误拼接了项目名称,或路径拼接逻辑存在漏洞

解决方案

  1. 确认真实文件路径
    在SSH终端执行命令,查看目标配置文件的真实名称:
ls /home/MMDetection/script_headvhelmet_test/

确认文件是retinanet_r50_fpn_1x_coco_script_headvhelmet_test.py还是retinanet_r50_fpn_1x_coco.py

  1. 修正变量赋值逻辑
  • 若真实文件名是retinanet_r50_fpn_1x_coco.py,说明model_config_file被错误拼接了项目名称_script_headvhelmet_test,需检查变量赋值代码,移除多余拼接部分
  • 若真实文件名是retinanet_r50_fpn_1x_coco_script_headvhelmet_test.py,则第一次执行时路径被错误截断,需排查路径拼接代码,确保model_config_file完整值被传入
  1. 标准化路径拼接
    使用Python的os.path模块拼接路径,避免字符串拼接错误,同时增加文件存在性检查:
import os
import subprocess

# 拼接完整配置文件路径
config_path = os.path.join(project_folder, model_config_file)
# 检查文件是否存在
if not os.path.isfile(config_path):
    print(f"错误:配置文件不存在于路径 {config_path}")
    exit(1)

# 构建执行命令
command = [
    "python",
    os.path.join(cwd, "mmdetection", "tools", "train.py"),
    config_path,
    "--auto-scale-lr",
    "--work-dir", os.path.join(project_folder, "train_output")
]
subprocess.run(command, check=True)
  1. 提前验证路径正确性
    在执行命令前打印完整路径,确认与真实文件路径一致:
print(f"完整配置文件路径:{os.path.join(project_folder, model_config_file)}")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 05:45:40