python - 文件未找到错误 : [Errno 2] No such file or directory + os.

标签 python python-3.x docker argparse

我正在创建一个包装器脚本来执行我的 python 程序。逻辑是这样的:

  1. 我会将所有需要的模块安装到 docker 容器中
  2. 拉取容器并运行脚本,这样任何人都可以运行我的脚本而不必担心依赖的模块
  3. 我创建了一个包装器脚本,它将被调用以执行所需的程序

这是我的包装脚本:

import os
import sys
import argparse

parse = argparse.ArgumentParser()
parse.add_argument('command', help="give datacenter name")
parse.add_argument('args', nargs=argparse.REMAINDER)
parse_arguments = parse.parse_args()

'''
Co-relate to the command and corresponding scripts to trigger
'''
scripts = {
    'verify' : '/path/verify.py'
    }

if __name__ == '__main__':

    if parse_arguments.command not in scripts:
        print('These are the available scripts to run:')
        print('\n'.join(sorted(scripts.keys())))
    else:
        os.execv(scripts.get(parse_arguments.command), 
[scripts.get(parse_arguments.command)] + parse_arguments.args) .   

我正在运行这个,

$ docker run -it --rm --net host run-script verify --listenv tpc1
Traceback (most recent call last):
  File "/path/runme.py", line 28, in <module>
    os.execv(scripts.get(parse_arguments.command), 
[scripts.get(parse_arguments.command)] + parse_arguments.args)
FileNotFoundError: [Errno 2] No such file or directory

我的 Docker 镜像是运行脚本

如果我从我的本地机器运行相同的代码,它确实有效。但在容器内它显示此文件未找到错误。

谁能帮我解决这个问题?

最佳答案

传递给 sys.argv 的第一个参数是运行文件的路径,这里是 /path/runme.py。从本地计算机运行时会找到该文件,但可能不在 docker 容器中(我不确定为什么)。

尝试设置 prog parameter在实例化您的 ArgParser 时,类似于:

parse = argparse.ArgumentParser(prog="run_me.py")

关于python - 文件未找到错误 : [Errno 2] No such file or directory + os.,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56681416/

相关文章:

docker - Hyperledger-部署到多个主机时Docker群集失败

带有本地服务器的 Docker/Kubernetes

Python 查找一个列表中介于另一个列表值之间的值的方法

Python2.7 + MySQL查询变量列返回变量值

python - Twisted 在此平台上不受支持的轮子

python - Pandas 行值到列标题

python - 带美元符号的 Pandas 数据框金额值

python - 列表中的换行符不打印在单独的行上

python - 类 'int' 未定义 '__getitem__' ,因此 '[]' 运算符不能在其实例上使用

docker - 如何使用docker-compose使Traefik成为反向代理?