2017-01-11 10 views
0

私は、SNMP(Nagios)のためのスケーラブルなソリューションのためにargparseを利用しようとしています。定数と変数を渡すargparse

私は定数を持ってしようとしているに実行しているとadd_argument()を介して渡されたVAR問題

例:

./SNMP.py -j 10 20 -l

は、-Jは、STRを格納することになる」.1.5.5.8" 引数を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

私は長いポストを書いて試してみることにしましたが、これはもっと役に立つでしょう:http://stackoverflow.com/questions/36166225/using-the-same-option-multiple-times- in-pythons-argparse –

+0

これまでに試したargpseコードは何ですか?既存のパーサに修正を提案するほうが、書かれた記述に基づいてゼロから書き込む方が簡単です。 – hpaulj

+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と表示されます。現在の行動は単純であり、予測可能である。

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= [...] 

代替はNone[]として、デフォルトのままにし、args.jitterNoneある場合の解析後にデフォルト値を自分で追加することです私は追加されるものがサブリストであることを示すためにnargsを追加しました。

デフォルトでのappendの詳細については、http://bugs.python.org/issue16399を参照してください。

+0

ありがとうございました! –

関連する問題