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.
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 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.
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 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”.
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 Mike is 11 years old He/She is absent today. He/She has math science classes