[python] 선택적 위치 인수를 Argparse?

다음과 같이 사용할 스크립트가 있습니다.
usage: installer.py dir [-h] [-v]

dir 다음과 같이 정의 된 위치 인수입니다.

parser.add_argument('dir', default=os.getcwd())

dir선택 사항이 되기를 원합니다. 지정하지 않으면 그냥 있어야 cwd합니다.

불행히도 dir인수를 지정하지 않으면 얻을 수 Error: Too few arguments있습니다.



답변

사용 nargs='?'(또는 nargs='*' 둘 이상의 디렉토리가 필요한 경우)

parser.add_argument('dir', nargs='?', default=os.getcwd())

확장 된 예 :

>>> import os, argparse
>>> parser = argparse.ArgumentParser()
>>> parser.add_argument('-v', action='store_true')
_StoreTrueAction(option_strings=['-v'], dest='v', nargs=0, const=True, default=False, type=None, choices=None, help=None, metavar=None)
>>> parser.add_argument('dir', nargs='?', default=os.getcwd())
_StoreAction(option_strings=[], dest='dir', nargs='?', const=None, default='/home/vinay', type=None, choices=None, help=None, metavar=None)
>>> parser.parse_args('somedir -v'.split())
Namespace(dir='somedir', v=True)
>>> parser.parse_args('-v'.split())
Namespace(dir='/home/vinay', v=True)
>>> parser.parse_args(''.split())
Namespace(dir='/home/vinay', v=False)
>>> parser.parse_args(['somedir'])
Namespace(dir='somedir', v=False)
>>> parser.parse_args('somedir -h -v'.split())
usage: [-h] [-v] [dir]

positional arguments:
  dir

optional arguments:
  -h, --help  show this help message and exit
  -v


답변

@VinaySajip의 확장으로 대답하십시오. 언급 할만한 추가 nargs가치가있다 .

  1. parser.add_argument('dir', nargs=1, default=os.getcwd())

N (정수). 명령 행에서 N 개의 인수가 함께 목록으로 수집됩니다.

  1. parser.add_argument('dir', nargs='*', default=os.getcwd())

‘*’. 존재하는 모든 명령 행 인수는 목록으로 수집됩니다. nargs='*' 여러 개의 위치 인수를 갖는 것이 일반적으로 의미가 없지만 여러 개의 선택적 인수를 nargs='*'사용할 수 있습니다.

  1. parser.add_argument('dir', nargs='+', default=os.getcwd())

‘+’. ‘*’와 마찬가지로 존재하는 모든 명령 행 인수는 목록으로 수집됩니다. 또한 하나 이상의 명령 줄 인수가 없으면 오류 메시지가 생성됩니다.

  1. parser.add_argument('dir', nargs=argparse.REMAINDER, default=os.getcwd())

argparse.REMAINDER. 나머지 모든 명령 줄 인수는 목록으로 수집됩니다. 이것은 일반적으로 다른 명령 행 유틸리티로 디스패치하는 명령 행 유틸리티에 유용합니다.

는 IF nargs키워드 인수가 제공되지 않는 인수의 수는 작용에 의해 결정된다 소비했다. 일반적으로 이것은 단일 명령 행 인수가 소비되고 단일 항목 (목록이 아님)이 생성됨을 의미합니다.

편집 (@Acumenus의 코멘트에서 복사) nargs='?' 문서 는 ‘?’라고 말합니다. 가능하면 하나의 인수가 명령 행에서 사용되어 단일 항목으로 생성됩니다. 명령 줄 인수가 없으면 기본값의 값이 생성됩니다.


답변

parser.add_argument또한 스위치가 필요합니다 . 사용할 수 있습니다 required=False. 다음은 Python 2.7의 샘플 스 니펫입니다.

parser = argparse.ArgumentParser(description='get dir')
parser.add_argument('--dir', type=str, help='dir', default=os.getcwd(), required=False)
args = parser.parse_args()


답변