2013-07-08 2 views
2

저는 파이썬으로 스크립트를 작성하고 argparse를 사용하여 인수를 구문 분석합니다. 이 스크립트는 사용 가능한 정렬 자 풀에서 두 개의 서로 다른 "정렬 자"를 비교하고 각각의 정렬 자에는 몇 가지 구성 옵션이 있습니다.Python에서 옵션이있는 옵션 argparse?

내가 좋아하는 뭔가를 내 스크립트를 호출 할 수 있도록하려면 :

./script.py --aligner aligner1 --param 12 --aligner aligner2 --param 30 --other_param 28 
내가 처음 --param 옵션은 처음에 "속하는"구조의 일종의 나가야 할

- aligner 옵션에 속하며 두 번째 --param 및 --other_param 옵션은 두 번째 --aligner 옵션에 "속합니다".

argparse는 이런 종류의 구조화 된 옵션 구문 분석을 할 수 있습니까?

그렇다면 가장 좋은 방법은 무엇입니까? 그렇지 않다면 내가보아야 할 또 다른 도서관이 있습니까?

내가 대신 사용할 수있는 UI 디자인이 대폭 개선 되었습니까?

+0

각 정렬 자에 전달되는 매개 변수가 선택적입니까 필수입니까? – Owen

+0

정렬자는 필수 매개 변수와 선택적 매개 변수를 둘 다 가질 수 있어야합니다. – interfect

답변

1

일반적으로 선택적 매개 변수 값을 함께 연결할 수 없으므로 원하는 것은 불가능하다고 생각합니다. 즉, --param 12--aligner aligner1과 연결하는 방법을 알 수 없습니다.

그러나. 다음과 같이

당신은 argparse를 사용할 수 있습니다

p = argparse.ArgumentParser() 
p.add_argument ("--aligner", action="append", nargs="+") 

이 각각 적어도 하나 개의 인수 (정렬 자 이름)을 필요로하는 여러 정렬 인수를 생성합니다. 그런 다음 각 정렬 자에 대한 매개 변수를 인코딩하는 추가 인코딩 체계 (파서의 도움말 텍스트에 문서화 할 수 있음)를 사용할 수 있습니다. 예를 들어, 당신은 당신의 스크립트를 호출 할 수 있습니다

./script.py --aligner aligner1 param=12 --aligner aligner2 param=30 other_param=28 

그런 다음 '='으로 분할하는 list으로 각 정렬에 대한 추가 인수를 분리 한 다음 dict을 만듭니다. 잠재적으로 기본 인수 집합으로 업데이트합니다.

+0

nargs = '*'옵션을 사용하고 두 번째 ArgumentParser를 사용하여 결과 목록에서 하위 옵션을 구문 분석하고 접두사 문자 '+'로 구문 분석합니다. – interfect

관련 문제