Python 无法解决此基本错误基数为10的int()的无效文本
我正在尝试自动化构建docker映像的过程。下面的docker图像传递了一个命令行参数,用python脚本检索该参数 自动化Python 无法解决此基本错误基数为10的int()的无效文本,python,python-3.x,docker,Python,Python 3.x,Docker,我正在尝试自动化构建docker映像的过程。下面的docker图像传递了一个命令行参数,用python脚本检索该参数 自动化 #!/bin/bash docker build -t test . --build-arg split=$split docker run --rm -it test Dockerfile FROM tensorflow/tensorflow:latst-py3 RUN mkdir -p /test/src ARG split WORKdir /test/src C
#!/bin/bash
docker build -t test . --build-arg split=$split
docker run --rm -it test
Dockerfile
FROM tensorflow/tensorflow:latst-py3
RUN mkdir -p /test/src
ARG split
WORKdir /test/src
COPY . ./
CMD["python", "script.py","$split"]
python脚本
m1=testing(int(sys.argv[1])
运行bash脚本
bash ./automate.sh 5
在运行上述代码时,我正在检索以下错误
ValueErro: invalid literal for int() with base 10; 'split'
非常感谢您的帮助。谢谢$split在automation.sh文件中为空 如果希望将值5作为inside automation.sh传递,它可以作为bash脚本的第一个arg提供,因此可以将其值作为$1 总之,如果您执行:
bash ./automate.sh 5
然后,脚本中的$0是./automation.sh,而$1是5。这称为位置参数。如果您确实希望从$split中获取值,请执行以下操作:
split=5 bash ./automate.sh
这将解决错误。
然而,看看你的Docker配方,有一个更好的方法来做到这一点
实际上,在构建时根本没有使用Docker ARG split参数。它只在CMD中引用,这就是为什么它是空的。要在运行时(而不是构建时)在shell中引用它,需要使用ENV。从生成时起,不能指定ENV值,而是在运行时使用docker run命令。只能在Dockerfile中指定其默认值
最后,由于您只在CMD中使用split,因此可以完全不使用ENV,而只将其指定为docker run位置参数中的命令参数。可能是这样的:
docker run myimage python script.py 5
$split在automation.sh文件中为空 如果希望将值5作为inside automation.sh传递,它可以作为bash脚本的第一个arg提供,因此可以将其值作为$1 总之,如果您执行:
bash ./automate.sh 5
然后,脚本中的$0是./automation.sh,而$1是5。这称为位置参数。如果您确实希望从$split中获取值,请执行以下操作:
split=5 bash ./automate.sh
这将解决错误。
然而,看看你的Docker配方,有一个更好的方法来做到这一点
实际上,在构建时根本没有使用Docker ARG split参数。它只在CMD中引用,这就是为什么它是空的。要在运行时(而不是构建时)在shell中引用它,需要使用ENV。从生成时起,不能指定ENV值,而是在运行时使用docker run命令。只能在Dockerfile中指定其默认值
最后,由于您只在CMD中使用split,因此可以完全不使用ENV,而只将其指定为docker run位置参数中的命令参数。可能是这样的:
docker run myimage python script.py 5
这回答了你的问题吗?对于Docker,我相对来说是个傻瓜,但很明显,您将字符串“split”传递给Python,而不是命令行中的数字字符串,因此显然,
$split
不能解析为实际的参数值,根据CMD
实际需要的链接,$split
似乎没有按预期进行扩展。在Python脚本中,为什么不直接打印sys.argv
?@barny无需,错误消息已经告诉您它是什么:'split'
。是的,但是如果OP学会了调试,即使只是通过打印导致错误的原因,也许他们在调试方面会做得更好?这是否回答了您的问题?对于Docker,我相对来说是个傻瓜,但很明显,您将字符串“split”传递给Python,而不是命令行中的数字字符串,因此显然,$split
不能解析为实际的参数值,根据CMD
实际需要的链接,$split
似乎没有按预期进行扩展。在Python脚本中,为什么不直接打印sys.argv
?@barny无需,错误消息已经告诉您它是什么:'split'
。是的,但是,如果OP学会了调试,即使只是通过打印导致错误的原因,也许他们在调试方面会做得更好?还值得注意的是,使用JSON数组形式CMD[…,“$split”]
,根本不处理这些命令字:脚本将文本字符串$split
作为参数传递。评论不错!因此出现了错误。整个脚本+Dockerfile配方对我来说就像一个小测验,测试您对bash如何处理参数以及build ARG和docker ENV之间的差异的理解。我只想在原始评论中提供这一点,而不是作为答案,但我目前的声誉不允许我这样做。非常感谢@lucernae,现在它工作得非常好。非常感谢您的帮助。很高兴它提供了帮助。值得注意的是,使用JSON数组形式CMD[…,“$split”]
,根本不处理这些命令字:脚本将文本字符串$split
作为参数传递。评论不错!因此出现了错误。整个脚本+Dockerfile配方对我来说就像一个小测验,测试您对bash如何处理参数以及build ARG和docker ENV之间的差异的理解。我只想在原始评论中提供这一点,而不是作为答案,但我目前的声誉不允许我这样做。非常感谢@lucernae,现在它工作得非常好。非常感谢你的帮助,很高兴你的帮助