Skip to content

Instantly share code, notes, and snippets.

@ksomemo
Last active August 29, 2015 14:08
Show Gist options
  • Save ksomemo/812de88e0ec11c2cf86e to your computer and use it in GitHub Desktop.
Save ksomemo/812de88e0ec11c2cf86e to your computer and use it in GitHub Desktop.
argparse_sample.py
# coding: utf-8
from __future__ import print_function # python2 print statement
import argparse
import sys
"""file doc string for description."""
__version__ = '0.0.1'
def main():
"""function doc string for description."""
## main command
# falseにすると-h, --helpが使えなくなる
parser = argparse.ArgumentParser(description=main.__doc__,
# usage='default is arguments list',
add_help=True,
epilog='more explain[ex: python argparse_sample.py -required=req pos --custom-action=CA -group-opt1 g1 sub2 --sub2arg 1]',
prog='ProgramName')
# positional arguments
parser.add_argument('positional')
# 引数を取得する際の属性名
parser.add_argument('-attrnamechange', dest='opt_name_change')
parser.add_argument('-attr_name1_not_change')
parser.add_argument('-attr-name2-hyphen-to-underscore')
parser.add_argument('-attrName3NotChange')
# optional arguments
parser.add_argument('-opt', '--loooooong')
parser.add_argument('-metavar', '--metavar', metavar='sample_var')
parser.add_argument('-default', default='optdefault')
parser.add_argument('-default-undefine', default=argparse.SUPPRESS)
parser.add_argument('-required', required=True)
parser.add_argument('--helparg', help='sample help arg')
# default, not default-val1
parser.set_defaults(defaultVal1='d1', defaultVal2=2)
# 型指定
parser.add_argument('-int', type=int, default=123)
parser.add_argument('-float', type=float, default=123.456)
parser.add_argument('-infile', type=file)
parser.add_argument('-outfile', type=argparse.FileType('w'), default=sys.stdout)
# 引数をリストとして受け取る
parser.add_argument('--list-arg-1', nargs=1)
parser.add_argument('--list-arg-2', nargs=2, metavar=('var1', 'var2'))
parser.add_argument('--list-arg-n', nargs='*')
parser.add_argument('--list-arg-1-or-more', nargs='+')
parser.add_argument('--arg-1-or-0', nargs='?')
# 許容する値の指定
parser.add_argument('--choice-str', choices='ABC')
parser.add_argument('--choice-tuple', choices=('AB', 'BC', 'DE'))
# group positional/optional 以外のグループ
my_group = parser.add_argument_group('my_group', description='my group description')
my_group.add_argument('--my-group-arg1')
my_group.add_argument('--my-group-arg2')
# どれか1つのオプションを取る場合
group = parser.add_mutually_exclusive_group(required=True)
group.add_argument('-group-opt1')
group.add_argument('-group-opt2')
# version
parser.add_argument('-v', '--version', action='version', version='%(prog)s ' + __version__)
# action optionを指定すると各アクションが実行されて値が格納/追加される
parser.add_argument('--store-true', action='store_true')
parser.add_argument('--store-false', action='store_false', default=True)
parser.add_argument('--store-const', action='store_const', const='const_value')
parser.add_argument('--append', action='append', default=['val'])
parser.add_argument('--append-const', action='append_const', const='const_value_append', default=['val'])
class CustomAction(argparse.Action):
def __call__(self, parser, namespace, values, option_string=None):
print('CustomAction:{!r} {!r} {!r}\n\n'.format(namespace, values, option_string))
setattr(namespace, self.dest, values)
parser.add_argument('--custom-action', action=CustomAction)
# sub command メインと同様、-h/--helpオプションはデフォルトで存在する
subparsers = parser.add_subparsers(title='sub command title', description='sub command description', help='sub command help')
parser_sub1 = subparsers.add_parser('sub1', help='sub command sub1 help')
parser_sub1.add_argument('sub1arg')
lambda_func = lambda args: print('sub1 command args:', args)
parser_sub1.set_defaults(func=lambda_func)
parser_sub2 = subparsers.add_parser('sub2', help='sub command sub2 help')
parser_sub2.add_argument('--sub2arg')
def def_func(args):
print('sub2 command args:', args)
return None
parser_sub2.set_defaults(func=def_func)
# parse
args = parser.parse_args()
print(args)
# file
print('')
args.outfile.write(str(args).replace(', ', '\n'))
print('')
if args.infile:
print(args.infile.readlines())
print('')
# sub command func
print(args.func(args))
if __name__ == '__main__':
main()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment