Skip to content

Commit d4b5233

Browse files
committed
complete argparse
1 parent 86d28de commit d4b5233

5 files changed

Lines changed: 95 additions & 0 deletions

File tree

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
import argparse
2+
3+
parser = argparse.ArgumentParser()
4+
parser.add_argument('-i', metavar='in-file', type=argparse.FileType('rt'))
5+
parser.add_argument('-o', metavar='out-file', type=argparse.FileType('wt'))
6+
7+
try:
8+
results = parser.parse_args()
9+
print('input file: ', results.i)
10+
print('output file: ', results.o)
11+
except IOError as msg:
12+
parser.error(str(msg))
13+
14+
# python argparse_FileType.py -h
15+
# python argparse_FileType.py -i argparse_FileType.py
16+
# python argparse_FileType.py -i argparse_FileType.py -o /tmp/file.txt
17+
# python argparse_FileType.py -i nosuchfile.txt
18+
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
import argparse
2+
3+
parser = argparse.ArgumentParser()
4+
parser.add_argument('--mode', choices=('read-only', 'read-write'))
5+
print(parser.parse_args())
6+
7+
# python argparse_choices.py -h
8+
# python argparse_choices.py --mode read-only
9+
# python argparse_choices.py --mode invlaid
10+
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
import argparse
2+
3+
4+
class CustomAction(argparse.Action):
5+
def __init__(self, *args, **kwargs):
6+
argparse.Action.__init__(self, *args, **kwargs)
7+
print('initializing customAction')
8+
for name, value in sorted(locals().items()):
9+
if name == 'self' or value is None:
10+
continue
11+
print('\t{} = {!r}'.format(name, value))
12+
print()
13+
14+
def __call__(self, parser, namespace, values, option_string=None):
15+
print('Processing customAction for {}'.format(self.dest))
16+
print('\tparser = {}'.format(id(parser)))
17+
print('\tvalues = {!r}'.format(values))
18+
print('\toption_string = {!r}'.format(option_string))
19+
20+
if isinstance(values, list):
21+
values = [v.upper() for v in values]
22+
else:
23+
values = values.upper()
24+
setattr(namespace, self.dest, values)
25+
print()
26+
27+
28+
parser = argparse.ArgumentParser()
29+
parser.add_argument('-a', action=CustomAction)
30+
parser.add_argument('-m', nargs='*', action=CustomAction)
31+
results = parser.parse_args(['-a', 'value', '-m', 'multivalue', 'second'])
32+
print(results)
33+

module_argparse/argparse_nargs.py

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
import argparse
2+
3+
parser = argparse.ArgumentParser()
4+
parser.add_argument('--three', nargs=3)
5+
parser.add_argument('--optional', nargs='?')
6+
parser.add_argument('--all', nargs='*', dest='all')
7+
parser.add_argument('--one-or-more', nargs='+')
8+
9+
print(parser.parse_args())
10+
11+
# python argparse_nargs.py -h
12+
# python argparse_nargs.py --three <- error
13+
# python argparse_nargs.py --three a b c
14+
# python argparse_nargs.py --optional with_value
15+
# python argparse_nargs.py --one-or-more <- error
16+
# python argparse_nargs.py --one-or-more with multiple values
17+

module_argparse/argparse_type.py

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
import argparse
2+
3+
parser = argparse.ArgumentParser()
4+
parser.add_argument('-i', type=int)
5+
parser.add_argument('-f', type=float)
6+
parser.add_argument('--file', type=open)
7+
8+
try:
9+
print(parser.parse_args())
10+
except IOError as msg:
11+
parser.error(str(msg))
12+
13+
# python argparse_type.py -i 100
14+
# python argparse_type.py -f 100
15+
# python argparse_type.py --file /tmp/a.log
16+
# python argparse_type.py --file argparse_type.py
17+

0 commit comments

Comments
 (0)