2012-12-14 2 views
2

파이썬의 argparse을 사용하여 명령 행 인수를 지원하는 readfile.py이라는 간단한 프로그램이 있다고 가정 해 보겠습니다.파이썬 argparse : nargs = '?' 선택적 인수들

프로그램은 위치 인수 input에 의해 지정된 파일에서 읽습니다. 추가 인수를 지정하지 않으면이 프로그램은 그리 흥미 진진하지 않습니다. input에서 읽고 종료됩니다. 선택적 인수 --output [OUTPUT_FILE]은 입력 파일을 파일에 기록해야 함을 의미합니다. OUTPUT_FILE도 선택 사항입니다. 지정되지 않으면 입력은 default.out에 기록되어야합니다. --ouput 명령 줄에 표시되지 않는 경우에 것을, 내가 없음과의 부재를 감지 할 수 있도록 내가 default=None를 사용

parser = argparse.ArgumentParser(description='Read from a file') 
parser.add_argument(
    'input', 
    help='file to read from') 
parser.add_argument(
    '--output', 
    nargs='?', 
    const='default.out', 
    default=None, 
    help="""write file to %(metavar)s. If %(metavar)s isn't 
     specified, write file to %(const)s.""", 
    metavar='OUTPUT_FILE') 
args = parser.parse_args() 
return args.file, args.output_file 

참고 :

는이 같은 내 인수 파서를 설정합니다.

usage: readfile.py [-h] [--output [OUTPUT_FILE]] input 

이것은 내가 실행하는 경우

python readfile.py input.in --output somefile.out 

또는

python readfile.py --output somefile.out input 

그것은 default.outoutput을 설정 실행하면 예상대로 인수를 처리합니다 이와 같은 사용 서명을 제공

python readfile.py input.in --output 

하지만

python readfile.py --output input.in 

를 실행하는 경우가 너무 적은 인수 것에 대해이 뿌려줍니다. argparse가 input.inoutput에서 default.out으로 설정하여이 패턴을 해석 할만큼 충분히 똑똑하다고 생각했습니다. 생성 된 사용법은 이것을 제안합니다.

나는 뭔가를 놓친가요?

+2

누구든지이 질문에 대해 의견을 제시하는 데 최소한 건설적인 힌트를 남겨 두어야합니다. – cfi

답변

4

아니요, 인식하지 못합니다. 마지막 예제에서는 input.in에서 --output으로 명확하게 전달됩니다.

나는 defaultconst 매개 변수를 뒤집을 것을 권장합니다. 기본값을 default.out으로 지정하려면 default='default.out'이어야합니다. 그런 다음 --output 매개 변수가 비어있는 경우 const을 다른 것으로 설정할 수 있습니다.

그런 식으로 기본값을 변경하지 않으려면 당신이 --output 매개 변수를 추가 할 필요가 없습니다, 당신은 예를 들어 stdout에 출력하려는 ​​경우 빈 --output 매개 변수를 사용할 수 있습니다.

+0

이 경우 (혼란스럽게도?)'default'는'--output' 다음에 매개 변수없이 사용되며'const'는'--output' 매개 변수없이 사용됩니다. – eidorb

+0

@ eidorb : 네, 그게 거꾸로입니다. 그것을 바꿔라. 사용 예정으로 사용하십시오. –

+0

사과해야합니다. 내 의견에는 앞쪽으로 돌아 왔지만 내 코드에는 의도 한대로 적용됩니다. – eidorb

0

"-"를 사용하여 옵션의 끝을 표시 할 수 있습니다. 예를 들면 다음과 같습니다.

python readfile.py --output -- input 

그러나 --output 인수를 필요로하고 허용하는 것은 :

python readfile.py --output - input 

입니다.