2016-09-18 5 views
0

내 프로그램에는 두 가지 기능이 있습니다. 하나는 인수없이 실행되고 다른 하나는 선택적 인수를 가질 수 있습니다. 그룹은 서로 간섭 할 수 없습니다.두 개의 독립적 인 그룹을 갖는 방법

python file.py --export -l name1 -l name2 -d 1/1/2015 
python file.py --export 
python file.py --run 

그리고이 허용되지 수 :

python file.py --run --export # Namespace(d=None, export=True, l=None, run=True) 

python file.py --run -l name1 # Namespace(d=None, export=False, l=['name1'], run=True) 

그러나에 지금처럼 허용되지 않는 작업도이 같은 오류가 상승

import argparse 

parser = argparse.ArgumentParser() 

root_group = parser.add_mutually_exclusive_group() 

group_export = root_group.add_argument_group() 
group_export.add_argument('--export', action='store_true', help='Exports data from database') 
group_export.add_argument('-l', action='append', help='Reduce output with league name') 
group_export.add_argument('-d', action='append', help='Reduce output with date range') 

group_run = root_group.add_argument_group() 
group_run.add_argument('--run', action='store_true', help='Start gathering of data') 

나는이 허용 할 의견에 의해 표시됩니다.

답변

1

인수 그룹은 상호 배타적 인 그룹 안에 중첩되지 않습니다. 이름에도 불구하고, 두 종류의 그룹은 다른 목적을 가지고 있습니다.

인수 그룹은 도움말 디스플레이의 인수를 그룹화합니다. 파싱하는 동안 아무것도하지 않습니다.

상호 배타적 인 그룹은 인수의 발생을 테스트하고이를 사용 행에 표시하려고합니다.

--export--run을 함께 사용할 수 없습니다. 그러나 실행하면 l 또는 d의 사용을 차단하지 않습니다. 그러나 당신은 그 값들을 무시할 수 있습니다. 또는 구문 분석 후에 자체 테스트를 수행하고 그 점에 대해 불평 할 수 있습니다.

사용 행에서이 제한을 나타내는 의미있는 방법은 무엇입니까? 사용자 정의해야 할 수도 있습니다.

또 다른 가능성은 서브 파서를 사용하는 것입니다. 그건 네 사건에 더 잘 어울릴거야. '내보내기'파서는이를 사용하는 인수를 정의합니다. '실행'은 더 이상의 인수를 허용하지 않습니다.

다른 방법으로 이것은 다른 argparse 질문에서 논의되었습니다. 사이드 바는 가능한 일치를 찾은 것 같습니다.

관련 문제