在python程序中使用Linux env变量

时间:2017-09-15 20:46:24

标签: python linux docker environment-variables dockerpy

我尝试在python代码中使用OS env变量。以下是示例。

Env Variable


    export DOCKER_HOST=10.0.0.5
    export PORT=1002

Python代码


    import os 
    import docker 
    host = os.environ['DOCKER_HOST']
    port = os.environ['PORT']
    client = docker.APIClient(base_url='tcp://host:port')

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

错误

raceback (most recent call last):
  File "./update.py", line 24, in 
    client = docker.APIClient(base_url="tcp://docker_host:docker_port")
  File "/usr/local/lib/python2.7/dist-packages/docker/api/client.py", line 109, in __init__
    base_url, IS_WINDOWS_PLATFORM, tls=bool(tls)
  File "/usr/local/lib/python2.7/dist-packages/docker/utils/utils.py", line 363, in parse_host
    "Invalid port: {0}".format(addr)
docker.errors.DockerException: Invalid port: docker_host:docker_port

1 个答案:

答案 0 :(得分:2)

您的问题在下面

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))

修改-1

感谢@code_onkel指出Python 3.6中的字符串插值(之前没有使用它)。如果您使用的是Python 3.6.X

,也可以使用下面的内容
client = docker.APIClient(base_url=f'tcp://{host}:{port}')

字符串前的f很重要。有关详细信息,请参阅PEP 498