📜  outparse pip (1)

📅  最后修改于: 2023-12-03 15:03:26.059000             🧑  作者: Mango

Outparse Pip

Outparse Pip 是一个 Python 模块,它可以帮助您解析命令行输出,提取所需的信息,并返回 Python 对象。

Outparse Pip 的功能包括:

  • 解析命令行输出
  • 提取所需的信息
  • 返回 Python 对象
安装

您可以使用 pip 安装 Outparse Pip:

pip install outparse
如何使用 Outparse Pip

假设您有以下命令行输出:

NAME    MAJ:MIN   RM   SIZE RO TYPE MOUNTPOINT
sda       8:0      0 931.5G  0 disk 
├─sda1    8:1      0   260M  0 part /boot/efi
├─sda2    8:2      0     1G  0 part /boot
└─sda3    8:3      0 930.2G  0 part 
  ├─ubuntu--vg-root
  │      252:0    0   927G  0 lvm  /
  └─ubuntu--vg-swap_1
         252:1    0   3.8G  0 lvm  [SWAP]

您可以使用 Outparse Pip 提取每个磁盘和它们的挂载点:

from outparse import Outparse

output = """
NAME    MAJ:MIN   RM   SIZE RO TYPE MOUNTPOINT
sda       8:0      0 931.5G  0 disk 
├─sda1    8:1      0   260M  0 part /boot/efi
├─sda2    8:2      0     1G  0 part /boot
└─sda3    8:3      0 930.2G  0 part 
  ├─ubuntu--vg-root
  │      252:0    0   927G  0 lvm  /
  └─ubuntu--vg-swap_1
         252:1    0   3.8G  0 lvm  [SWAP]
"""

# 定义规则来解析输出
rule = [{
    'name': 'name',
    'matcher': '(?P<name>[^\s]+)',
}, {
    'name': 'mount',
    'matcher': '(?P<size>\d+\w+) (?P<mount>.+)$',
    'type': 'finditer',
    'kwargs': {'key': 'subgroups'},
}]

# 创建 Outparse 实例并运行规则
parser = Outparse(rule)
result = parser.run(output)

# 输出结果
for disk in result:
    print(f'{disk["name"]}:')
    for mount in disk['mount']:
        print(f'  * {mount}')

输出:

sda:
  * /boot/efi
  * /boot
  * /
  * [SWAP]
支持的规则

Outparse Pip 支持以下类型的规则:

tokenize

tokenize 规则用于将命令行输出中的每个行分割成 [Token] 对象。

rule = [{
    'name': 'line',
    'matcher': '.+',
    'type': 'tokenize',
}]
iterate

iterate 规则用于迭代命令行输出中的每一行,并将结果保存在一个列表中。

rule = [{
    'name': 'line',
    'matcher': '.+',
    'type': 'iterate',
}]
find

find 规则用于在命令行输出中查找特定模式并提取信息。

rule = [{
    'name': 'interface',
    'matcher': '^([\w/]+):',
}, {
    'name': 'ip_address',
    'matcher': '\s+inet\s+(\d{1,3}(?:\.\d{1,3}){3})',
}, {
    'name': 'netmask',
    'matcher': '\s+netmask\s+(\d{1,3}(?:\.\d{1,3}){3})',
}]
findall

findall 规则用于在命令行输出中查找所有特定模式并提取信息。

rule = [{
    'name': 'interface',
    'matcher': '^([\w/]+):',
    'type': 'findall',
}, {
    'name': 'ip_address',
    'matcher': '\s+inet\s+(\d{1,3}(?:\.\d{1,3}){3})',
    'type': 'findall',
}, {
    'name': 'netmask',
    'matcher': '\s+netmask\s+(\d{1,3}(?:\.\d{1,3}){3})',
    'type': 'findall',
}]
finditer

finditer 规则用于在命令行输出中查找所有特定模式并提取信息,并将结果保存在一个列表中。

rule = [{
    'name': 'name',
    'matcher': '(?P<name>[^\s]+)',
}, {
    'name': 'mount',
    'matcher': '(?P<size>\d+\w+) (?P<mount>.+)$',
    'type': 'finditer',
    'kwargs': {'key': 'subgroups'},
}]
总结

Outparse Pip 是一个非常有用的 Python 模块,它可以帮助您解析命令行输出,并提取所需的信息。Outparse Pip 提供了几种规则类型,可以满足不同的需求。如果您需要处理命令行输出,Outparse Pip 对您来说一定是一个不错的选择。