【发布时间】:2016-02-23 19:53:07
【问题描述】:
我正在使用 Python 启动 docker 实例。
如何确定它们是否正在运行?我可以很容易地从终端使用docker ps,例如:
docker ps | grep myimagename
如果返回任何内容,则图像正在运行。如果它返回一个空字符串,则图像没有运行。
但是,我无法理解如何让 subprocess.Popen 使用它 - 它需要一个 参数列表,例如:
p = subprocess.Popen(['docker', 'ps', '|', 'grep', 'myimagename'], stdout=subprocess.PIPE)
print p.stdout
不起作用,因为它尝试使用“docker ps”并将其设为“docker”和“ps”命令(docker 不支持)。
似乎我也不能给它完整的命令,因为Popen 试图将 整个 第一个参数作为可执行文件运行,所以失败了:
p = subprocess.Popen('docker ps | grep myimagename', stdout=subprocess.PIPE)
print p.stdout
有没有办法从 Python 中实际运行 docker ps?我不知道尝试使用subprocess 是否是最佳途径。然而,这是我用来运行 docker 容器的工具,所以它似乎是正确的路径。
- 如何确定 docker 实例是否从 Python 脚本运行?
【问题讨论】:
-
您不需要
| grep部分,您可以从python执行此操作。否则,Popen()的shell = True参数是否有帮助? See here -
@slezica 之类的。我想使用另一个例子,我可以在
subprocess.check_output(cmd, shell=True)周围使用 try/except 块并让它工作 - 感觉......太老套了,所以我想认为有更好的方法(当没有找到匹配项时显然返回一个非 0 的代码,所以 check_output 抛出一个异常)。