python - 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'
我尝试过的故障排除步骤:
- 我确认路径是正确的,无论是拼写还是位置
- docker 容器的顶层是
project_root
文件夹 - 我已经尝试过相对路径和确切路径,但都不起作用
- 我已经 SSH 进入容器并检查了文件,shell 脚本存在于我提供的确切目录中。
- 我曾尝试使用
os.path.abspath()
生成 shell 脚本的绝对路径,但仍未找到。 - 我已经检查
os.cwd
确认当前工作目录是usr/src
- 我曾经
Path(__file__).parent('./bar.sh')
找到 shell 脚本的绝对路径,它只是给了我 string/usr/src/folder_a/folder_b/bar.sh
,和我一直在使用的一样。
有任何想法吗?
解决方案
推荐阅读
- javascript - 单击按钮时如何在 URL 中添加值而不重新加载/重新定位页面
- android - 如何仅在本机反应中为特定仪表板创建横向模式?
- matlab - Matlab中未定义的函数'head'
- java - 有人可以在程序的帮助下解释哈希表冲突是如何发生的吗?
- android - 调用 adapter.notifyItemChanged(position) 但 position+1 处的 itemView 被解除
- java - 从JVM检索jar文件?
- angular - 如何将具有不同数据集的多个表添加到exceljs中的同一张表中
- single-sign-on - 站点 id = 2 的 Shibboleth SP 配置无法使其正常工作
- powershell - PowerShell - 错误的数组长度/计数(为空时为 1)
- sql-server - 将 PDF 插入 SQL 表