python - 如何获取所有可能的响应模式的容器名称?

标签 python regex multiline

sudo docker ps -a , to check the status of containers.

响应1:

CONTAINER ID        IMAGE                 COMMAND             CREATED             
STATUS              PORTS                                                             
NAMES
3f8ac711da37        local_discourse/app   "/sbin/boot"        23 hours ago        
Up 23 hours         0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp, 0.0.0.0:300-
>3000/tcp   name1
3f8ac700ba37        local_discourse/app   "/sbin/boot"        20 hours ago        
Up 23 hours         0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp, 0.0.0.0:300-
>3000/tcp   name2

我可以使用 (.*)\s{2,}(Up 找到 RESPONSE1STATUSNAMES .*\s+)\s{2,}(\d+\..*)\s{2,}(.*)

m = re.finditer('(.*)\s{2,}(Up.*\s+)\s{2,}(\d+\..*)\s{2,}(.*)', resp, re.MULTILINE)
for i, j in enumerate(m):
    dict[m.group(4)] = m.group(2)

响应 2:

3f8ac711da37        local_discourse/app   "/sbin/boot"        23 hours ago     Exited (1) 50 minutes ago    name1
3f8ac700ba37        local_discourse/app   "/sbin/boot"        20 hours ago     Exited (135) 50 minutes ago  name2

我可以通过 (.*)\s{2,}(Exit.*\s+)\s{2,}\s{2,}(.*)< 找到 RESPONSE2 的状态和名称

m = re.finditer('(.*)\s{2,}(Exit.*\s+)\s{2,}\s{2,}(.*)', resp, re.MULTILINE)
for i, j in enumerate(m):
    dict[m.group(3)] = m.group(2)

我正在尝试制作一个通用的正则表达式,它可以获取任何类型响应的 STATUSNAME (状态可以是 UP、Exit 和 Stopped)。这可能吗?

最佳答案

也许你可以尝试以下方法:

import subprocess
import re

resp = subprocess.check_output('docker ps -a', shell = True)

item = re.finditer('.*?\s{1}ago\s{2,}(.*?\s).*\s{2,}(.*)', resp, re.MULTILINE)
for i in item:
    print(' : '.join([i.group(1).strip(), i.group(2).strip()]))

对 re: 的一点解释:

  1. 它将找到第一个只有一个空格且附近至少有 2 个空格的 ago
  2. (.*?\s) 将查找容器状态
  3. 最后,(.*) 将找到容器名称。

输出如下:

Exited : mystifying_hoover
Exited : abc_1
Exited : infallible_agnesi
Exited : laughing_curran
Exited : eager_clarke
Exited : youthful_northcutt
Exited : nostalgic_mclean
Exited : jolly_turing
Created : determined_curran
Exited : peaceful_mestorf
Exited : awesome_jones
Up : cc_2
Up : celery_worker
Up : dpps
Up : celery_broker2
Up : rdebug
Up : rdebug2
Up : cassandra

关于python - 如何获取所有可能的响应模式的容器名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52867804/

相关文章:

python - 类函数不返回正确的值

regex - Perl 正则表达式将多行转换为单行

vim - VIM 中的多行编辑(使用标记)

java - 如何使用正则表达式验证 JTable 的第一列?

Python正则表达式匹配特定货币格式

php - 以数字结尾的正则表达式匹配字符串

javascript - 在 JavaScript 中对多行字符串进行注释

python - 在 Django 模板中减去 2 个整数

python - 如何在 Python 2.7 中设置全部小写

python - 在 3d 空间中找到 python numpy.ndarray 的最近邻居