繁体   English   中英

如何在Python的引号内传递变量?

[英]How to pass a variable inside quotes on Python?

我正在使用 docker-py SDK,我需要在containers.run中传递一些变量。

我需要的:

MYDIR = '/variable/dir'
MYURL = 'https://example.com'
client = docker.from_env()
container = client.containers.run(image="alpine:latest", name="container", user="1000", volumes=['MYDIR:/tmp'], command=["/bin/sh", "echo MYURL"])

我得到了什么:一个接一个的错误。

如您所见,我需要将变量放在volumescommand的引号内。

我尝试了各种组合,但没有任何运气:带引号,不带引号,使用 str 连接等......

知道如何解决这个问题吗?

提前致谢。

您想将变量中的字符串与另一个字符串组合。 在 Python 中有很多方法可以做到这一点。 最新的方法称为 f-strings,就语法而言,它非常接近您的“在引号内传递变量”(尽管这是对实际发生的事情的过度简化)。

例如:

container = client.containers.run(image="alpine:latest", 
                name="container", user="1000", volumes=[f'{MYDIR}/tmp'],
                command=["/bin/sh", f"echo {MYURL}"])

请注意,我们插入变量的每个字符串 1) 以f开头,位于左引号之前(因此“f-strings”—— f表示格式化),2) 将变量放在{...}括号中。 实际上,您可以在括号内使用任何表达式,而不仅仅是单个变量名。

解决您的问题的关键是了解为什么会发生此错误:

错误请求("create MYDIR/resources: "MYDIR/resources" 包含本地卷名的无效字符,仅允许 "[a-zA-Z0-9][a-zA-Z0-9_.-]"。如果你打算传递一个主机目录,使用绝对路径”)

在此错误中,实际上没有任何地方需要您“将变量放在卷和命令的引号内”。 您实际需要做的是修复路径字符串(称为“引号”)以包含错误消息中正则表达式指定的有效卷名。

因为您审查了 MYDIR,所以我无法为您提供进一步的帮助,说明您为什么会收到无效的卷名错误。 也许您可能有一条带有未转义空格等的路径...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM