shell 命令和 python 中的文件操作哪个更昂贵?

shell 命令和 python 中的文件操作哪个更昂贵?

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

相关内容