[컴][파이썬] ArgumentParser

파이썬 command line / python command line option / option parser / python simple console command line parser / easy to make command line script with python / python cli / interface

ArgumentParser

개인적으로 OptionParser 를 써왔기 때문에, OptionParser 의 source 를 ArgumentParser 로 바꿔놓은 source 를 적어놓는다.

usage = "usage: %prog [options] arg"
parser = OptionParser(usage=usage, version="%prog 1.0")
parser.add_option("-f", "--file", dest="filename", type="string",
                  help="write report to FILE", metavar="FILE")
parser.add_option("--quiet", dest="verbose"
                  action="store_false", default=True,
                  help="don't print status messages to stdout")
parser.set_defaults(file='input.txt')
(options, args) = parser.parse_args()
if len(args) != 1:
    parser.error("incorrect number of arguments")
if options.verbose:
        print "reading %s..." % options.filename
import argparse
import datetime

parser = argparse.ArgumentParser(description='Process some integers.')
parser.add_argument('my_param_number', action='store', 
                   nargs=1, type=int) # positional argument
parser.add_argument("--version", action="version", version="%(prog)s 1.0")
parser.add_argument(
    "-s",
    "--startdate",
    help="start-date, format YYYY-MM-DD",
    required=True,
    action="store",
    type=lambda d: datetime.datetime.strptime(d, "%Y-%m-%d"),
)  # positional argument
args = parser.parse_args()

# use
print(type(startdate))
>> datetime.datetime
print(args.my_param_number)

parse_args

기존의 class 를 namespace 로 이용

이 argument 를 그대로 기존에 존재하는 class 의 attribute 로 넣어줄 수 있다. 아래처럼 사용하면 된다.

class C(object):
...     pass
...
c = C()
args = parser.parse_args(namespace=c)

ArgumentParser Object

Usage

ArgumentParser 에 usage 는 굳이 넣지 않아도 자동으로 만들어 준다. 그것이 마음에 안들면 usage 옵션을 사용할 수 있다. 여기를 참고하자.

description

description 도 추가할 수 있다. 이녀석은 help message 에 나오게 된다. 간단하게 한줄을 넣을 수도 있지만, 다양한 길이, 모양의 string 이 가능하다. 다만 이 때에는 formatter_class 를 사용해야 한다.

add_argument

parameter

  • 첫 parameter : '-' 를 붙이면 optional argument 가 되고, '-' 가 없으면 그냥 argument 가 된다.

  • action

    • 'store'
    • 'store_const'
    • 'store_true' , 'store_false'
    • 'append'
    • 'append_const'
    • 'count'
    • 'help'
    • 'version'
    • 위의 액션 이외의 액션은 argparse.Action 을 상속받아서 만들수 있다.(참고)
  • nargs : 몇개의 argument 를 가져다 사용할 것이냐 쯤으로 해석하면 되겠다.

    • 1 , 2 , 3 ... : 정해진 수의 argument 를 가져다 list 로 만든다.
    • '?' : 1개의 argument 를 소모한다.
    • '*' : option 뒤에 붙은 모든 녀석들을 list 로 만들어준다.
    • '+' : '*' 와 같다. 다만 argument 가 1개도 없다면 error 를 보여준다.
    • argparse.REMAINDER : 남은 argument 를 묶어서 list 로 준다.
  • const : 'store_const', 'append_const' 에서 쓰인다. 기본값은 None

  • default : dest 에 쓰이는 default 값

  • type : default 는 str 이다.

    • int
    • float
    • file
    • argparse.FileType('w') / argparse.FileType('r')
    • 다른 function
  • choices : list 로 넘겨주면 된다. 가능한 특정 값들을 정해줄 수 있다.

  • required : 이 option 이 optional 인지 여부를 정해줄 수 있다.

  • help : help message 에 들어갈 설명

  • metavar : help message 에서 argument 를 어떤 string 으로 표현할지를 정해준다.

  • dest : 기본적으로 '첫 parameter' 의 string 이 dest 로 만들어진다. 이 dest 에 정해준 이름으로 attribute 를 만들어 준다.

특정 type 으로 argument 를 받을때

위 예제를 참고하자.

parser.add_argument(
    "-s",
    "--startdate",
    help="start-date, format YYYY-MM-DD",
    required=True,
    action="store",
    type=lambda d: datetime.datetime.strptime(d, "%Y-%m-%d"),
) 

References

  1. 15.4. argparse — Parser for command-line options, arguments and sub-commands — Python 2.7.13 documentation
  2. cpython: fb27b7141de0 Lib/argparse.py
  3. Specify date format for Python argparse input arguments - Stack Overflow

댓글 없음:

댓글 쓰기