我正在尝试将argparse用于SNMP(Nagios)的可扩展解决方案。
我遇到的问题是尝试让常量和变量通过add_argument()传递
示例:
./ SNMP.py -j 10 20 -l </ p>
-j会存储str&#34; .1.5.5.8&#34; 后面的参数将设置警告整数级别和绕过parser.add_argument()中设置的默认值的关键整数级别
-l将存储不同的OID str,但会使用存储在parser.add_argument()
中的默认警告和关键级别谢谢!
简而言之,我必须解决这个难题:
parser = argparse.ArgumentParser(description = "This is used to parse latency, jitter, and packet loss on an HDX")
parser.add_argument("-j", action = 'append', dest = 'jitter',
default = [".2.51.5.9.4","20 40"])
args = parser.parse_args()
warn, crit = args.jitter[-1].split()
答案 0 :(得分:0)
In [16]: parser=argparse.ArgumentParser()
In [17]: parser.add_argument("-j", action = 'append', dest = 'jitter',
...: default = [".2.51.5.9.4","20 40"])
Out[17]: _AppendAction(option_strings=['-j'], dest='jitter', nargs=None, const=None, default=['.2.51.5.9.4', '20 40'], type=None, choices=None, help=None, metavar=None)
In [18]: parser.parse_args([])
Out[18]: Namespace(jitter=['.2.51.5.9.4', '20 40'])
In [19]: parser.parse_args(['-j','1'])
Out[19]: Namespace(jitter=['.2.51.5.9.4', '20 40', '1'])
因此append
操作会将default
放入命名空间,并将-j
提供的任何值附加到该列表中。此外,还可以重复-j
,添加更多值。
有些人认为这是一个错误,并且值应该附加到[]
,并且默认情况下只应显示-j
根本不会使用。当前行为简单且可预测。
另一种方法是将默认设置保留为None
或[]
,并在解析args.jitter
为None
后自己添加默认值:
In [22]: parser.add_argument("-j", action = 'append', dest = 'jitter', nargs=2)
Out[22]: _AppendAction(option_strings=['-j'], dest='jitter', nargs=2, const=None, default=None, type=None, choices=None, help=None, metavar=None)
In [23]: parser.parse_args([])
Out[23]: Namespace(jitter=None)
In [24]: parser.parse_args(['-j','20','40'])
Out[24]: Namespace(jitter=[['20', '40']])
所以测试会是这样的:
if args.jitter is None:
args.jitter= [...]
我添加了nargs
以显示附加的内容是一个子列表。
有关使用默认值附加的更多讨论,请参阅http://bugs.python.org/issue16399。