2017-12-16 29 views
1

git commitgit status 같은 하위 명령은 add_subparsers을 사용하여 argparse으로 쉽게 파싱 할 수 있습니다. 명령 줄에서 선택한 선택 항목에 대해 중첩 된 설정 입력을 얻으려면 어떻게해야합니까?Python 3 : 초기 선택 집합에 대해 중첩 된 보조 인수를 구문 분석

play.py --path /path/to.file --duration 100 --filter 이퀄라이저 --effect 에코 equalizer_settings 1 :

의 내가 모든 사용자 정의 설정을 사용하여 음악을 재생하고 싶은 말은하자 2 echo_settings 여기

5 --filter equalizer--effect echo은 첫 번째 수준의 선택이다 그러나 나는 차 인수로 그 설정을 얻을 필요가있다. 예 : echo_settings 5equalizer_settings 1 2.

보조 설정은 둘 이상일 수 있으며 바람직하게는 명명 된 인수를 사용할 수 있습니다. 아래에 나열

import argparse 
parser = argparse.ArgumentParser(description='Play music the way I want it.') 
parser.add_argument('-p', '--path', type=str, required=True, help='File path') 
parser.add_argument('-d', '--duration', type=int, default=50, help='Play duration') 
parser.add_argument('-f', '--filter', choices=['none', 'equalizer'], default='none', help='Filter selection') 
parser.add_argument('-e', '--effect', choices=['none', 'echo', 'surround'], default='none', help='Effect selection') 

subparsers = parser.add_subparsers(help='Settings of optional parameters') 

equalizer_parser = subparsers.add_parser("equalizer_settings") 
equalizer_parser.add_argument('equalizer_min_range', type=int) 
equalizer_parser.add_argument('equalizer_max_range', type=int) 

echo_parser = subparsers.add_parser("echo_settings") 
echo_parser.add_argument('echo_strength', type=int) 

surround_parser = subparsers.add_parser("surround_settings") 
surround_parser.add_argument('surround_strength', type=int) 

args = parser.parse_args() 
print(args) 

현재 error: unrecognized arguments

답변

0

에서이 오류가 당신은 한 번에 그 3 settings의 즉 하나 하나 subparser를 사용할 수 있습니다 ... 내가 지금까지있는 것입니다. 순서대로 여러 개의 서브 파서를 사용하는 몇 가지 고급 방법이 있지만 나는 거기에 가고 싶지 않다고 생각합니다 (이전 SO argparse 질문 참조).

하지만 실제로 서브 파서를 사용해야합니까? 선택적 항목의 단지 또 다른 세트 (플래그) 인수, 뭔가 같은 이유 :

parser.add_argument("--equalizer_settings", nargs=2, type=int) 

parser.add_argument("--echo_settings", type=int) 

parser.add_argument("--surround_strength", type=int 

당신은 단지 몇 가지 매개 변수를 추가하고, 행동 명령의 일종을 호출하지.

+0

나는 이것을 생각했지만, 이것을 구성하는 더 좋은 방법이 있는지 궁금해하고 있었다. 이전 인수에서 선택한 조건에 따라 필요한 인수를 사용할 수 있습니까? 그런 다음 아마도 이것들을 가지고 해결할 수있을 것입니다. – Joel

+0

조건부로 필수 항목을 만드는 가장 쉬운 방법은 구문 분석 후 동시 발생을 확인하는 것입니다. 'parse_args'이므로 모든 필수 검사가 마지막 단계로 수행됩니다. Subparsers는 조건부로 필요한 인수를위한 유일한 기본 제공 도구입니다. – hpaulj