首页 > 解决方案 > Python3:在 docker 容器中运行时 subprocess.call() 找不到文件

问题描述

[已解决] 我找到了与链接问题无关的解决方案。我在这里转发了答案。

我有一个 Python (3.9) 脚本,它存在于以下文件结构中:

L usr
  L src
    L project_root
      L folder_a
        L folder_b
          L foo.py
          L bar.sh

foo.py包含这行代码,它调用一个子进程bar.sh并将一些数据传递给它:

subprocess.call(['/usr/src/folder_a/folder_b/bar.sh', f'{some_data}'])

这个子进程调用在本地运行时发现 shell 脚本很好。

但是,当我在 docker 容器中运行相同的代码时,会出现以下异常:

Exception: [Errno 2] No such file or directory: './folder_a/folder_b/bar.sh'

我尝试过的故障排除步骤:

  1. 我确认路径是正确的,无论是拼写还是位置
  2. docker 容器的顶层是project_root文件夹
  3. 我已经尝试过相对路径和确切路径,但都不起作用
  4. 我已经 SSH 进入容器并检查了文件,shell 脚本存在于我提供的确切目录中。
  5. 我曾尝试使用os.path.abspath()生成 shell 脚本的绝对路径,但仍未找到。
  6. 我已经检查os.cwd确认当前工作目录是usr/src
  7. 我曾经Path(__file__).parent('./bar.sh')找到 shell 脚本的绝对路径,它只是给了我 string /usr/src/folder_a/folder_b/bar.sh,和我一直在使用的一样。

有任何想法吗?

标签: pythondockersubprocess

解决方案


推荐阅读