2017-01-11 5 views
0

SNMP (Nagios)에 대해 확장 가능한 솔루션에 argparse를 사용하려고합니다.Argparse 전달 상수 및 변수

내가 상수를 위해 노력하고 실행 해요 그리고 add_argument()를 통해 함께 전달 바르 문제

예 :

./SNMP.py -j (10) (20) -l

경고 정수 레벨과 parser.add_argument에 설정된 디폴트()

는 -l 다른 OID str을 저장할 것을 우회하는 중요한 정수 레벨을 설정합니다 후 ".1.5.5.8" 인수를 STR를 저장하는 것입니다

-j 하지만 기본 경고 및 위험 수준은 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을 추가했습니다.

기본값이있는 추가에 대한 자세한 내용은 http://bugs.python.org/issue16399을 참조하십시오.

+0

고마워요! –