📅  最后修改于: 2023-12-03 15:03:26.059000             🧑  作者: Mango
Outparse Pip 是一个 Python 模块,它可以帮助您解析命令行输出,提取所需的信息,并返回 Python 对象。
Outparse Pip 的功能包括:
您可以使用 pip 安装 Outparse Pip:
pip install outparse
假设您有以下命令行输出:
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 对您来说一定是一个不错的选择。