본문 바로가기
Python/Python FAQ

Python Argparse 선택적 위치 인수?, Argparse optional positional arguments?

by 베타코드 2023. 6. 27.
반응형

질문


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

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

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

나는 dir이 선택 사항이 되기를 원합니다: 지정되지 않은 경우에는 cwd가 되어야합니다.

불행히도, dir 인수를 지정하지 않으면 Error: Too few arguments가 발생합니다.


답변


nargs='?'를 사용하십시오. (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
반응형

댓글