from __future__ import print_function
from argparse import ArgumentParser
from random import randint
def get_parser():
# create the top-level parser
parser = ArgumentParser(prog='PROG')
subparsers = parser.add_subparsers(help='sub-command help')
# create the parser for the "sum" command
parser_a = subparsers.add_parser('sum_cmd', help='sum some integers')
parser_a.add_argument('-a', type=int,
help='an integer for the accumulator')
parser_a.add_argument('-b', type=int,
help='an integer for the accumulator')
parser_a.add_argument('--sum', dest='sm', action='store_const',
const=sum, default=max,
help='sum the integers (default: find the max)')
# create the parser for the "min" command
parser_b = subparsers.add_parser('min_cmd', help='min some integers')
parser_b.add_argument('-y', type=float,
help='an float for the accumulator')
parser_b.add_argument('-z', type=float,
help='an float for the accumulator')
parser_b.add_argument('--min', dest='mn', action='store_const',
const=min, default=0,
help='smallest integer (default: 0)')
return parser
if __name__ == '__main__':
parser = get_parser()
input_sum_cmd = ['sum_cmd', '--sum']
input_min_cmd = ['min_cmd', '--min']
args, rest = parser.parse_known_args(
# `sum`
input_sum_cmd +
['-a', str(randint(21, 30)),
'-b', str(randint(51, 80))] +
# `min`
input_min_cmd +
['-y', str(float(randint(64, 79))),
'-z', str(float(randint(91, 120)) + .5)]
)
print('args:\t ', args,
'\nrest:\t ', rest, '\n', sep='')
sum_cmd_result = args.sm((args.a, args.b))
print(
'a:\t\t {:02d}\n'.format(args.a),
'b:\t\t {:02d}\n'.format(args.b),
'sum_cmd: {:02d}\n'.format(sum_cmd_result), sep='')
assert rest[0] == 'min_cmd'
args = parser.parse_args(rest)
min_cmd_result = args.mn((args.y, args.z))
print(
'y:\t\t {:05.2f}\n'.format(args.y),
'z:\t\t {:05.2f}\n'.format(args.z),
'min_cmd: {:05.2f}'.format(min_cmd_result), sep='')
ZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBwcmludF9mdW5jdGlvbgoKZnJvbSBhcmdwYXJzZSBpbXBvcnQgQXJndW1lbnRQYXJzZXIKZnJvbSByYW5kb20gaW1wb3J0IHJhbmRpbnQKCgpkZWYgZ2V0X3BhcnNlcigpOgogICAgIyBjcmVhdGUgdGhlIHRvcC1sZXZlbCBwYXJzZXIKICAgIHBhcnNlciA9IEFyZ3VtZW50UGFyc2VyKHByb2c9J1BST0cnKQogICAgc3VicGFyc2VycyA9IHBhcnNlci5hZGRfc3VicGFyc2VycyhoZWxwPSdzdWItY29tbWFuZCBoZWxwJykKCiAgICAjIGNyZWF0ZSB0aGUgcGFyc2VyIGZvciB0aGUgInN1bSIgY29tbWFuZAogICAgcGFyc2VyX2EgPSBzdWJwYXJzZXJzLmFkZF9wYXJzZXIoJ3N1bV9jbWQnLCBoZWxwPSdzdW0gc29tZSBpbnRlZ2VycycpCiAgICBwYXJzZXJfYS5hZGRfYXJndW1lbnQoJy1hJywgdHlwZT1pbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nYW4gaW50ZWdlciBmb3IgdGhlIGFjY3VtdWxhdG9yJykKICAgIHBhcnNlcl9hLmFkZF9hcmd1bWVudCgnLWInLCB0eXBlPWludCwKICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdhbiBpbnRlZ2VyIGZvciB0aGUgYWNjdW11bGF0b3InKQogICAgcGFyc2VyX2EuYWRkX2FyZ3VtZW50KCctLXN1bScsIGRlc3Q9J3NtJywgYWN0aW9uPSdzdG9yZV9jb25zdCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Q9c3VtLCBkZWZhdWx0PW1heCwKICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdzdW0gdGhlIGludGVnZXJzIChkZWZhdWx0OiBmaW5kIHRoZSBtYXgpJykKCiAgICAjIGNyZWF0ZSB0aGUgcGFyc2VyIGZvciB0aGUgIm1pbiIgY29tbWFuZAogICAgcGFyc2VyX2IgPSBzdWJwYXJzZXJzLmFkZF9wYXJzZXIoJ21pbl9jbWQnLCBoZWxwPSdtaW4gc29tZSBpbnRlZ2VycycpCiAgICBwYXJzZXJfYi5hZGRfYXJndW1lbnQoJy15JywgdHlwZT1mbG9hdCwKICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdhbiBmbG9hdCBmb3IgdGhlIGFjY3VtdWxhdG9yJykKICAgIHBhcnNlcl9iLmFkZF9hcmd1bWVudCgnLXonLCB0eXBlPWZsb2F0LAogICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J2FuIGZsb2F0IGZvciB0aGUgYWNjdW11bGF0b3InKQogICAgcGFyc2VyX2IuYWRkX2FyZ3VtZW50KCctLW1pbicsIGRlc3Q9J21uJywgYWN0aW9uPSdzdG9yZV9jb25zdCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Q9bWluLCBkZWZhdWx0PTAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nc21hbGxlc3QgaW50ZWdlciAoZGVmYXVsdDogMCknKQogICAgcmV0dXJuIHBhcnNlcgoKCmlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CiAgICBwYXJzZXIgPSBnZXRfcGFyc2VyKCkKCiAgICBpbnB1dF9zdW1fY21kID0gWydzdW1fY21kJywgJy0tc3VtJ10KICAgIGlucHV0X21pbl9jbWQgPSBbJ21pbl9jbWQnLCAnLS1taW4nXQoKICAgIGFyZ3MsIHJlc3QgPSBwYXJzZXIucGFyc2Vfa25vd25fYXJncygKICAgICAgICAjIGBzdW1gCiAgICAgICAgaW5wdXRfc3VtX2NtZCArCiAgICAgICAgWyctYScsIHN0cihyYW5kaW50KDIxLCAzMCkpLAogICAgICAgICAnLWInLCBzdHIocmFuZGludCg1MSwgODApKV0gKwogICAgICAgICMgYG1pbmAKICAgICAgICBpbnB1dF9taW5fY21kICsKICAgICAgICBbJy15Jywgc3RyKGZsb2F0KHJhbmRpbnQoNjQsIDc5KSkpLAogICAgICAgICAnLXonLCBzdHIoZmxvYXQocmFuZGludCg5MSwgMTIwKSkgKyAuNSldCiAgICApCgogICAgcHJpbnQoJ2FyZ3M6XHQgJywgYXJncywKICAgICAgICAgICdcbnJlc3Q6XHQgJywgcmVzdCwgJ1xuJywgc2VwPScnKQoKICAgIHN1bV9jbWRfcmVzdWx0ID0gYXJncy5zbSgoYXJncy5hLCBhcmdzLmIpKQogICAgcHJpbnQoCiAgICAJJ2E6XHRcdCB7OjAyZH1cbicuZm9ybWF0KGFyZ3MuYSksCiAgICAJJ2I6XHRcdCB7OjAyZH1cbicuZm9ybWF0KGFyZ3MuYiksCiAgICAJJ3N1bV9jbWQ6IHs6MDJkfVxuJy5mb3JtYXQoc3VtX2NtZF9yZXN1bHQpLCBzZXA9JycpCiAgICAKICAgIGFzc2VydCByZXN0WzBdID09ICdtaW5fY21kJwogICAgYXJncyA9IHBhcnNlci5wYXJzZV9hcmdzKHJlc3QpCiAgICBtaW5fY21kX3Jlc3VsdCA9IGFyZ3MubW4oKGFyZ3MueSwgYXJncy56KSkKICAgIHByaW50KAogICAgCSd5Olx0XHQgezowNS4yZn1cbicuZm9ybWF0KGFyZ3MueSksCiAgICAJJ3o6XHRcdCB7OjA1LjJmfVxuJy5mb3JtYXQoYXJncy56KSwKICAgIAknbWluX2NtZDogezowNS4yZn0nLmZvcm1hdChtaW5fY21kX3Jlc3VsdCksIHNlcD0nJykK