【问题标题】:Use Linux env variables in python program在 python 程序中使用 Linux 环境变量
【发布时间】:2018-02-25 02:22:27
【问题描述】:

我正在尝试在 python 代码中使用操作系统环境变量。下面是例子。

环境变量

导出 DOCKER_HOST=10.0.0.5 出口端口=1002

Python 代码

导入操作系统 进口码头 主机 = os.environ['DOCKER_HOST'] 端口 = os.environ['PORT'] 客户端 = docker.APIClient(base_url='tcp://host:port')

它应该注入主机和端口的变量,但它不起作用。我尝试添加无助的.format

错误

赛跑(最近一次通话最后): 文件“./update.py”,第 24 行,在 客户端 = docker.APIClient(base_url="tcp://docker_host:docker_port") 文件“/usr/local/lib/python2.7/dist-packages/docker/api/client.py”,第 109 行,在 __init__ base_url,IS_WINDOWS_PLATFORM,tls=bool(tls) 文件“/usr/local/lib/python2.7/dist-packages/docker/utils/utils.py”,第 363 行,在 parse_host "无效端口:{0}".format(addr) docker.errors.DockerException:端口无效:docker_host:docker_port

【问题讨论】:

  • 我知道 - 我标记的可能重复项建议您完全按照您已经在做的事情做。但是你没有给我们任何信息来告诉我们为什么“它不起作用”。到底发生了什么?你确定变量存在吗?
  • 你必须像这样进行字符串格式化:base_url='tcp://{host}:{port}'.format(host=host, port=port)

标签: python linux docker environment-variables dockerpy


【解决方案1】:

您的问题如下

client = docker.APIClient(base_url='tcp://host:port')

您使用host:port 作为文字字符串。 Python 在 Python 3.6 之前没有字符串插值。您可以使用以下方式之一

client = docker.APIClient(base_url='tcp://' + host + ':' + port)
client = docker.APIClient(base_url='tcp://{}:{}'.format(host,port))
client = docker.APIClient(base_url='tcp://{0}:{1}'.format(host,port))
client = docker.APIClient(base_url='tcp://{host}:{port}'.format(host=host,port=port))
client = docker.APIClient(base_url='tcp://%s:%s' % (host,port))

Edit-1

感谢@code_onkel 指出 Python 3.6 中的字符串插值(之前没有使用过)。如果你使用 Python 3.6.X,你也可以在下面使用

client = docker.APIClient(base_url=f'tcp://{host}:{port}')

字符串前面的f 很重要。详情请参考PEP 498

【讨论】:

  • Python 3.6 实际上有字符串插值。
猜你喜欢
  • 1970-01-01
  • 2014-06-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-16
  • 1970-01-01
相关资源
最近更新 更多