我正在开发一个自定义 Nagios 脚本,我想在其中以与现有 Nagios 插件相同的方式实现命令行参数的解析check_disk
.
在该插件中你有一个选项参数-C
to Clear
当前配置并使用新参数重新开始。
摘自check_disk
help:
check_disk -w 100 -c 50 -C -w 1000 -c 500 -p /foo -C -w 5% -c 3% -p /bar
----(3)----- ---------(1)---------- --------(2)--------
Checks 警告/严重阈值:
- 对于体积
/foo
使用1000M和500M作为阈值
- 对于体积
/bar
使用5%和3%
- 所有剩余卷使用 100M 和 50M
我尝试过argparse
和一些参数作为action='append'
但重复的参数存储在列表中,丢失的参数不作为“无”条目包含在内。
我也尝试过parse_known_args
希望首先停止解析unknown参数,但我得到一个包含所有已知参数和未知参数列表的名称空间。
我想我唯一的选择是在解析命令行参数之前使用正则表达式。
import re
import argparse
import sys
parser = argparse.ArgumentParser()
parser.add_argument('-w', help='warning')
parser.add_argument('-c', help='critical')
parser.add_argument('-p', help='path')
separator=r'-S'
groups = re.split(separator, '|'.join(sys.argv[1:])))
args = []
for idx, group_args in enumerate(groups):
args.append('')
args[idx]=parser.parse_args(group_args.split('|'))
我不知道如果argparse
可以处理这种场景,无需使用正则表达式进行分割。
或者如果这是我能找到的最好方法。
这与以下无关在 Python 的 argparse 中多次使用相同的选项 https://stackoverflow.com/questions/36166225/using-the-same-option-multiple-times-in-pythons-argparse因为情况不同,所以我有不同的可选参数,而不仅仅是一个具有多个值的选项。
在上面的例子中(3)没有选项-p
,(1)和(2)有它。这是差异之一,也是问题之一。如果所有选项都是强制性的,那就很容易了。