Command-line Arguments and argparse in Python
GOAL
Today’s goal is to understand how to get command-line arguments in Python and how to use argparse module.
Environment
Windows 10
Python 3.8.7
What is command-line arguments in Python?
This is an example for parsing command-line arguments without argparse. The system can get the list of command line arguments with sys.argv.
for idx, args in enumerate(args):
import sys
def args_test():
args = sys.argv
for idx, args in enumerate(args):
print(idx, args)
args_test()
import sys
def args_test():
args = sys.argv
for idx, args in enumerate(args):
print(idx, args)
args_test()
An example of input in command prompt and the result are as below. Please note that the arguments are only string type and separated by spaces.
> python\test\argparse_test.py aa 100 "cc" [item1, items]
0 python\test\argparse_test.py
> python\test\argparse_test.py aa 100 "cc" [item1, items]
0 python\test\argparse_test.py
1 aa
2 100
3 cc
4 [item1,
5 items]
> python\test\argparse_test.py aa 100 "cc" [item1, items]
0 python\test\argparse_test.py
1 aa
2 100
3 cc
4 [item1,
5 items]
Optional arguments and flags
The following is an example to use optional arguments in command-line. It takes an effort to parse the list sys.argv.
def print_student_info():
# the argument template name, age, --classes class1 class2 --absence
# example1 Sulley 12 --classes math music science
# example2 Mike 11 --absence --classes math
print("{} is {} years old".format(args[1], args[2]))
print("He/She is absent today.")
class_start = args.index("--classes")+1
flag_item = list(filter(lambda x: x.startswith("--"), args[class_start:]))
class_end = args.index(flag_item[0])
classes = args[class_start:class_end]
classes = args[class_start:]
print("He/She has {} classes".format(" ".join(classes)))
import sys
def print_student_info():
# the argument template name, age, --classes class1 class2 --absence
# example1 Sulley 12 --classes math music science
# example2 Mike 11 --absence --classes math
args = sys.argv
print("{} is {} years old".format(args[1], args[2]))
if "--absence" in args:
print("He/She is absent today.")
if "--classes" in args:
classes = []
class_start = args.index("--classes")+1
flag_item = list(filter(lambda x: x.startswith("--"), args[class_start:]))
if flag_item:
class_end = args.index(flag_item[0])
classes = args[class_start:class_end]
else:
classes = args[class_start:]
print("He/She has {} classes".format(" ".join(classes)))
print_student_info()
import sys
def print_student_info():
# the argument template name, age, --classes class1 class2 --absence
# example1 Sulley 12 --classes math music science
# example2 Mike 11 --absence --classes math
args = sys.argv
print("{} is {} years old".format(args[1], args[2]))
if "--absence" in args:
print("He/She is absent today.")
if "--classes" in args:
classes = []
class_start = args.index("--classes")+1
flag_item = list(filter(lambda x: x.startswith("--"), args[class_start:]))
if flag_item:
class_end = args.index(flag_item[0])
classes = args[class_start:class_end]
else:
classes = args[class_start:]
print("He/She has {} classes".format(" ".join(classes)))
print_student_info()
>python\test\argparse_test.py Sulley 12 --classes math music science
He/She has math music science classes
>python\test\argparse_test.py Mike 11 --absence --classes math
>python\test\argparse_test.py Sulley 12 --classes math music science
Sulley is 12 years old
class_start 4
He/She has math music science classes
>python\test\argparse_test.py Mike 11 --absence --classes math
Mike is 11 years old
He/She is absent today.
He/She has math classes
>python\test\argparse_test.py Sulley 12 --classes math music science
Sulley is 12 years old
class_start 4
He/She has math music science classes
>python\test\argparse_test.py Mike 11 --absence --classes math
Mike is 11 years old
He/She is absent today.
He/She has math classes
What is argparse?
The argparse is the module that makes it easy to write user-friendly command-line interfaces. It is useful when you’d like to use optional command-line arguments in your python program.
How to use argparse
You can add the argument with add_argument() function. Check the Python documentation for details about parameters for add_argument() such as “nargs” or “action”.
def print_student_info():
parser = argparse.ArgumentParser()
parser.add_argument("name", type=str)
parser.add_argument("age", type=int)
parser.add_argument("--classes", nargs='*') # for list of optional arguments
parser.add_argument("--absence", action="store_true") # for optional arguments with no value
args = parser.parse_args()
print("{} is {} years old".format(args.name, args.age))
print("He/She is absent today.")
print("He/She has {} classes".format(" ".join(args.classes)))
import sys
import argparse
def print_student_info():
parser = argparse.ArgumentParser()
parser.add_argument("name", type=str)
parser.add_argument("age", type=int)
parser.add_argument("--classes", nargs='*') # for list of optional arguments
parser.add_argument("--absence", action="store_true") # for optional arguments with no value
args = parser.parse_args()
print("{} is {} years old".format(args.name, args.age))
if args.absence:
print("He/She is absent today.")
if args.classes:
print("He/She has {} classes".format(" ".join(args.classes)))
print_student_info()
import sys
import argparse
def print_student_info():
parser = argparse.ArgumentParser()
parser.add_argument("name", type=str)
parser.add_argument("age", type=int)
parser.add_argument("--classes", nargs='*') # for list of optional arguments
parser.add_argument("--absence", action="store_true") # for optional arguments with no value
args = parser.parse_args()
print("{} is {} years old".format(args.name, args.age))
if args.absence:
print("He/She is absent today.")
if args.classes:
print("He/She has {} classes".format(" ".join(args.classes)))
print_student_info()
>python\test\argparse_test.py Mike 11 --classes math science --absence
He/She has math science classes
>python\test\argparse_test.py Mike 11 --classes math science --absence
Mike is 11 years old
He/She is absent today.
He/She has math science classes
>python\test\argparse_test.py Mike 11 --classes math science --absence
Mike is 11 years old
He/She is absent today.
He/She has math science classes