The Basics of argparse
00:00
In the previous lesson, I gave you an overview of the course. In this lesson, I’ll show you the basics of the argparse
library. argparse
is a powerful library for managing command line arguments to your Python programs. It’s part of the standard library, so there’s nothing extra to install. You do have to do a bit of work, though.
00:21
There are five basic steps. You need to import argparse
, create a parser, add arguments to the parser, and once you’ve got that all configured, you call the parser’s .parse_args()
method, which does exactly what it says. It parses the command line and returns to you a namespace object. That namespace object contains flags and data of what arguments were used.
00:47
You use this object to control the execution of your script. Let’s go see some examples. I’m going to start without argparse
so that you can see the difference.
00:58
The script in the top window here takes a couple of command line parameters and prints out a statement a number of times. To get at what was passed in on the command line, you need the sys
module. More specifically, you need the argv
part of the sys
module. Note that I’m using the second item in this list. The first item contains the name of the calling program.
01:20 This may seem strange, but it is to be consistent with the way things have been done in Unix programs since the dawn of time. Well, not quite that old, but near enough for our purposes.
01:32
I’m storing the first argument from sys.argv
in the name
variable. Then the second argument is being converted to an integer and stored in num
.
01:42
As I mentioned before, everything off the command line is a string, unless you do something to change that, like I have here. Lines 8 and 9 use these two variables to print out Hal’s protesting statement to name
, and it does that num
times.
01:58
Let’s run this … passing in Dave
and 3
gives the famous 2001 movie quote three times over. Let’s try it again. This time, I’m going to forget something.
02:13
Well, that’s not terribly friendly. A better-written program would have checked the length of a argv
and printed out a message if it was too long or too short. Let me try something else.
02:28
Right number of arguments, but the wrong type. Spelling out Three
is no good. It blows up the call on line 6. Again, you could write some code that checks this or handles it better, or you could use argparse
. It slices, it dices, it makes short work of tomatoes—oh, and it parses the command line too.
02:50
This new program is the argparse
equivalent of what you just saw. A couple of lines longer, but it has way more error-proofing than the previous example.
02:58
As the previous example had none, that’s not particularly hard to achieve. To get started, you have to import the argparse
library. Then you create a parser. Once you have a parser, you call add_argument()
to add an argument to the parser. In this case, I’ve called it name
, which is consistent with the previous program.
03:22
On line 6, I do the same thing again, but for num
. I also do one more thing, which is tell argparse
that this argument is expected to be an integer.
03:31
It will automatically convert it to such for me and handles the case if the user gives me something that can’t be converted. With my arguments defined, the last step is to invoke the parser using the .parse_args()
method. Notice you don’t have to do anything with sys.argv
.
03:48
It does all that under the covers. Finally, lines 10 and 11 are essentially the same as before. The only difference is instead of using name
and num
as variables, I am accessing them from inside of the args
namespace returned from .parse_args()
. Fire up the command line.
04:16
Hmm, that’s better. Instead of crashing, you get a usage
message and an indication of the problem: the num
argument is required.
04:29 And as for the type-conversion problem, again much cleaner than before.
04:36 That’s it. That’s all you really need. Short course, huh? Wait, but there’s more. Next up, I’ll show you how to improve your help messages and dig into the different kinds of arguments.
04:49 Are you waiting for a Monty Python reference? You’re in the wrong room for that.
Become a Member to join the conversation.