파이썬 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 를 받을때
- Specify date format for Python argparse input arguments - Stack Overflow : datetime 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"),
)
댓글 없음:
댓글 쓰기