docker ps
<ID> <name> <port>
它给出了运行 docker等的列表。
我们可以在 中获得相同的信息/var/lib/docker/containers/<ID>/config.json
。 (这里的ID与上面命令的ID相同。如果ID越多,目录就会越多)。
我需要使用 python 脚本检索一些值。那么,哪个是检索值的更有效方法,suprocess.check_output("<CMD>", shell=True)
或者f=open(<FILE PATH>,'r')
.我明白,甚至docker ps
命令也使用该文件来获取信息。
当我们发布docker ps
这个清单时,可能长也可能短。那么,我综合来看,哪个更贵呢?哪个有效?谢谢!
答案1
直接操作文件是正确的方法。
如果您知道docker ps
也使用该文件来获取信息,那么只需直接在 Python 中处理该文件即可。
使用subprocess
调用会docker
消耗外部进程的成本,分叉外部进程总是很昂贵的。
使用简单的 Python 代码:
def get_container_info(container_id):
path = '/var/lib/docker/containers/{}/config.json'.format(container_id)
with open(path, 'r') as f:
d = json.load(f)
return d['ID'], d['Name'], d['NetworkSettings']['Ports']
在ipython
交互式 shell 中:
%timeit subprocess.check_output('docker ps', shell=True)
10 loops, best of 3: 56.8 ms per loop
%timeit get_container_info('<container_id>')
10000 loops, best of 3: 79.6 µs per loop