[lang-ref] ( parse_args_overview ) ( python )
def test_parse_args_overview(capsys):
# use argparse
import argparse
parser = argparse.ArgumentParser(formatter_class=argparse.ArgumentDefaultsHelpFormatter)
# positional arguments
parser.add_argument('FILENAME_IN', help='....')
parser.add_argument('FILENAME_OUT')
# optional arguments
parser.add_argument('--verbose', '-v', action='store_true')
parser.add_argument('--force', '-f', action='store_true')
parser.add_argument('--prefix')
# parse: In real app, call without arguments. Then sys.argv will be handled.
# args = parser.parse_args()
# parse: For test, specify arguments. This simulates command below:
# ./sample.py a.txt b.txt --verbose --prefix=test
parser.prog = './sample.py'
args = parser.parse_args(['a.txt', 'b.txt', '--verbose', '--prefix=test.'])
assert args.FILENAME_IN == 'a.txt'
assert args.FILENAME_OUT == 'b.txt'
assert args.verbose == True
assert args.force == False
assert args.prefix == 'test.'
# check output: In real app, this will be printed in terminal.
with pytest.raises(SystemExit) as e:
parser.parse_args(['--help'])
assert e.value.code == 0
captured = capsys.readouterr()
# NOTICE: This is environment dependent
message = captured.out
assert 'usage:' in message
assert './sample.py' in message
assert '[-h]' in message
# sample:
'''
usage: ./sample.py [-h] [--verbose] [--force] [--prefix PREFIX]
FILENAME_IN FILENAME_OUT
positional arguments:
FILENAME_IN
FILENAME_OUT
options:
-h, --help show this help message and exit
--verbose, -v
--force, -f
--prefix PREFIX
'''