Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 无法解决此基本错误基数为10的int()的无效文本_Python_Python 3.x_Docker - Fatal编程技术网

Python 无法解决此基本错误基数为10的int()的无效文本

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

我正在尝试自动化构建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
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,现在它工作得非常好。非常感谢你的帮助,很高兴你的帮助