2011-05-02 2 views
6

argparse가이 인수를 구문 분석하지 않는 이유는 무엇입니까? 내가 처음 생각 막대 인수를 전달하면Argparse 잘못된 위치 및 선택적 매개 변수의 순서

error: too few arguments

가 작동 : : 이제

bar --foo 1 2 3 

이 다음과 같은 오류를 제공

parser = argparse.ArgumentParser() 
parser.add_argument('--foo', nargs='+')     
parser.add_argument('bar') 

사용

--foo 1 2 3 bar 

그 자체가 너무 나쁘지 않습니다. 일관된 도움말 텍스트와이 일을 어떻게 그래서

usage: argparsetest.py [-h] [--foo FOO [FOO ...]] bar

: 나는 처음이 동작은 줄이 마지막으로해야한다고 argparse 우리를 위해 만들어 도움과 일관성이 단지의 위치 인수를 갖는 살 수있다 ?

여기에 완전한 test program이 있습니다.

+0

는 지금 같은 문제 다 퉜다. '--'를 사용하여'nargs' globbing을 종료 할 수 있으므로 위의 예에서'--foo 1 2 3-bar'가 작동해야합니다. 그것은 필자의 견해로는 위치 적 주장에 필요한 논증의 수를 확보하면서 실제로 자동으로 해결되어야한다. http://bugs.python.org/issue9338 및 http://bugs.python.org/issue9182에서 공개 된 이슈에 대한 논의가 있습니다 (적어도 명확하게 문서화되어야합니다). –

답변

3

아마도 --input - output 플래그를 사용하고 해당 옵션을 add_argument에서 required = True로 설정해보십시오.

http://docs.python.org/dev/library/argparse.html#the-add-argument-method

+0

고마워, 그 작품과 일관된 도움말 텍스트를 제공합니다. 유일한 단점은 여분의 - 입력 플래그 부분이지만 나는 그것으로 살 수 있습니다. 건배 – Reimund

+0

문제를 해결하려면 parser.add_argument ('- bar', required = True)를 사용하는 것이 좋습니다. 그러면 다음 인수를 전달할 수 있습니다. --foo 1 2 3 - bar bar – Reimund

4

nargs='+'은 나머지 모든 args를 모으기 위해 argparse에게 알려주므로 bar이 포함됩니다. bar이 그 자체로 의미있는 논의가되고 --foo으로 가져온 args의 일부가 아니라는 것을 추측 할 수있는 마법 같은 방법이 없습니다.

docs의 예제는 --foo 인수를 말하며, nargs='+'이 아닌 간단한 인수를 참조합니다. 차이점을 반드시 이해하십시오.

+1

마지막 n 개의 인수가 n 개의 필수 위치 인수로 간주되도록 구현하는 것이 쉽습니다. 그것은 마법이 아니에요, 그건 디자인 결정 일 뿐이에요. – Reimund