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

Python3 subprocess.call()在Docker容器内运行时找不到指定文件问题

解决方案

修复方案按优先级排序:

  • 核查镜像代码一致性
    你提供的代码中使用绝对路径调用脚本,但报错信息显示实际执行的是相对路径./folder_a/folder_b/bar.sh,确认Docker构建时是否使用了旧的代码缓存,重新构建镜像时添加--no-cache参数即可避免该问题。
  • 给shell脚本添加可执行权限
    进入容器执行chmod +x /usr/src/folder_a/folder_b/bar.sh,也可以直接在Dockerfile中添加如下步骤在构建阶段配置权限:
RUN chmod +x /usr/src/folder_a/folder_b/bar.sh
  • 检查脚本的shebang声明与换行符格式
    确认bar.sh第一行存在正确的解释器声明,例如#!/bin/sh或#!/bin/bash。如果脚本是在Windows环境下编写的,换行符可能携带回车符导致解析失败,可在容器内执行dos2unix /usr/src/folder_a/folder_b/bar.sh转换格式。
  • 调整subprocess调用写法
    显式指定解释器执行脚本,规避权限和shebang相关问题,修改代码如下:
subprocess.call(['sh', '/usr/src/folder_a/folder_b/bar.sh', f'{some_data}'])
  • 增加调试逻辑确认路径有效性
    调用subprocess前添加校验代码,确认路径可被Python进程正常识别:
import os
script_path = "/usr/src/folder_a/folder_b/bar.sh"
print(f"路径有效性校验:{os.path.exists(script_path)}")

如果校验返回存在但调用依然报错,即可完全确定是前三个原因导致的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 19:48:03