Last active
August 29, 2015 14:08
-
-
Save ksomemo/812de88e0ec11c2cf86e to your computer and use it in GitHub Desktop.
argparse_sample.py
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# 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