2017-04-24 1 views
0

원래 Python; argparse; how to specify position of positional arguments에 의해 설정된 질문으로 돌아와서 왜이 작업을해야하는지에 대한 질문에 대답하는 유효한 사용 사례가 나왔습니다.선택적 위치 지정 인수 앞에 선택적 인수 값을 정의하는 방법은 무엇입니까?

에게 도움의 예를 들어 옵션 값과 argparse으로 행할 옵션 위치 인수와 인수가있는 경우 : 다음

$ myprog.py --help 
usage: playargs.py [-h] [-i [I]] [positional [positional ...]] 
-----cropped----- 

값을 사용하지 않고 '-i'플래그를 설정하는 유일한 방법 'I'도 위치 값을 얻고, 마지막에 '-i'플래그를 배치합니다. 따라서, 작성하는 경우

$ myprog.py -i one two three 

'one'값은 '-i'로 불가피하게 이동합니다.

: 당신이 '하나', '둘'과 '세'모두를 원하는 경우에 positionals로한다, 다음 유일한 방법은 내가로 받아 구문을 제한 할 수있는 방법이 있어야한다고 생각

$ myprog.py one two three -i 

을 작성하는 것입니다

playargs.py [positional [positional ...]] [-i [I]] 

선택적인 위치 인수 앞에 값 'I'의 선택도가 명확하지 않습니다.

argparse 또는 다른 모듈을 사용할 수 있습니까?

+0

단지 도움말 텍스트 형식에 관한 것입니다. –

+0

아니요.이 도움말 텍스트에 설명 된 동작을 달성하려고합니다. – athanassis

답변

1

연결된 질문은 약 usage입니다. Positionals는 공통의 POSIX 명령 줄 연습을 반영, 단지 컨벤션의 문제로리스트의 끝으로 이동됩니다

prog [optionals] infile outfile 

그것은 인수가 승인 또는 구문 분석하는 방법을 반영하지 않습니다.

argparse은 의도적으로 주문에 의존하지 않습니다. 위치 지정은 자체간에 순서가 지정되지만 선택 항목은 순서에 관계없이 위치 지정간에 발생할 수 있습니다.

loop: 
    handle positionals (up to next optionals flag) 
    handle a optional 
handle remaining positionals 

그리고 다른 기능은 nargs 욕심 때문이다 : 기본 구문 분석 루프입니다. 너의 '?' -i에 대해서는 아무런 문제없이 만족할지라도 사용 가능한 경우 1 개의 인수가 사용됩니다. 실제로는 re (정규식) 패턴 일치를 사용합니다.

argparse에는 -i이 위치의 끝이나 위치 뒤에 나타나야한다는 메커니즘이 없습니다. 기본 파싱 루프를 변경해야합니다.

다른 옵션 또는 '-'만 가변 길이 nargs을 종결하기위한 도구입니다.

prog -i -- 1 2 3 
prog -i -f 1 2 3 # -f is another argument 
prog 1 2 3 -i 4 

optparse 다른 구문 분석 전략을 가지고있다. 나는 그것에 익숙하지 않지만, 전체적으로 argv을 옵션으로 전달하고, 원하는 것을 사용할 수있게하고, 나머지를 파싱하는 것을 계속한다. positionals은 구문 분석되지 않은 문자열 (argparse parse_known_argsextras)입니다.

예전의 UNIX 실습을 모델로 한 이전 구식 파서가 몇 개 있습니다. 수많은 제 3 자 파서가 있습니다. 물론 sys.argv을 직접 처리 할 수 ​​있습니다.

+0

감사합니다. '-'도구가 유용합니다. 나는 이것이 문제를 해결한다고 생각한다. – athanassis