Table of Contents
Primer: Arguments vs Parameters
I’m sometimes confused. Is it an argument or a parameter? So here it goes:
A parameter is a variable in a function definition.
When a function is called, the arguments are the data you pass into the function’s parameters.
The same goes for a program: A program has parameters, you call a program with arguments.
Argparse Module
Batteries included! The argparse module provides a nice way to parse your program arguments:
import argparse
if __name__ == '__main__':
parser = argparse.ArgumentParser()
parser.add_argument('positional_param')
parser.add_argument('-o', '--optional_param')
parser.add_argument('-r', '--required_param', required=True)
args = parser.parse_args()
print(args.positional_param)
print(args.optional_param)
print(args.required_param)
Positional Parameters
Positional arguments are useful for shorter programs. These parameters do not have a name. You could call them “unnamed parameters” as well.
It is important that you keep the right sequence when calling the program:
parser = argparse.ArgumentParser()
parser.add_argument('positional_param_one')
parser.add_argument('positional_param_two')
args = parser.parse_args()
print(args.positional_param_one)
print(args.positional_param_two)
$ python positional_args.py foo bar
foo
bar
Optional Parameters
Optional parameters have a name you have to use when providing an argument to the program
parser.add_argument('--optional_param')
The double dash indicates an optional parameter
You can provide a shorthand for an optional parameter as well
parser.add_argument('-o', '--optional_param')
When you leave out an optional argument, the value will be defaulted to None
Two ways of calling a program with optional arguments:
$python optional_args.py
None
$python optional_args.py --optional_param foobar
foobar
Required “Optional” Parameters
Now it gets a bit weird: You can make an optional parameter required.
(another strong argument that these should be named “named parameters”)
parser.add_argument('-r', '--required_param', required=True)
If you don not provide the argument you will get:
$ python required_params.py
usage: required_params.py [-h] -r REQUIRED_PARAM
required_params.py: error: the following arguments are required: -r/--required_param
So better provide the parameter:
$ python required_params.py -r foobar
foobar
Command Line Help
When you start your script with the -h or –help parameter, you will get a nice overview of the usage
$ python main.py -h
usage: main.py [-h] [-o OPTIONAL_PARAM] -r REQUIRED_PARAM positional_param
positional arguments:
positional_param
optional arguments:
-h, --help show this help message and exit
-o OPTIONAL_PARAM, ---optional_param OPTIONAL_PARAM
-r REQUIRED_PARAM, --required_param REQUIRED_PARAM