In this exercise we will cover one more input method you can use to pass
variables to a script (script being another name for your .py
files). You
know how you type python ex13.py
to run the ex13.py
file? Well the
ex13.py
part of the command is called an "argument". What we'll do now is
write a script that also accepts arguments.
Type this program and I'll explain it in detail:
.. literalinclude:: ex/ex13.py :linenos:
On line 1
we have what's called an "import". This is how you add
features to your script from the Python feature set. Rather than
give you all the features at once, Python asks you to say what
you plan to use. This keeps your programs small, but it also acts
as documentation for other programmers who read your code later.
The argv
is the "argument variable", a very standard name in programming,
that you will find used in many other languages. This variable holds the
arguments you pass to your Python script when you run it. In the exercises you
will get to play with this more and see what happens.
Line 3 "unpacks" argv
so that, rather than holding all the arguments, it
gets assigned to four variables you can work with: script
, first
,
second
, and third
. This may look strange, but "unpack" is probably the
best word to describe what it does. It just says, "Take whatever is in argv,
unpack it, and assign it to all of these variables on the left in order."
After that we just print them out like normal.
I call them "features" here (these little things you import
to make
your Python program do more) but nobody else calls them features. I just
used that name because I needed to trick you into learning what they
are without jargon. Before you can continue, you need to learn
their real name: modules
.
From now on we will be calling these "features" that we import
modules.
I'll say things like, "You want to import the sys
module." They are
also called "libraries" by other programmers, but let's just stick with
modules.
Run the program like this (and you must pass three command line arguments):
python ex13.py first 2nd 3rd
This is what you should see when you do a few different runs with different arguments:
.. literalinclude:: ex/ex13.txt :language: console
You can actually replace "first", "2nd", and "3rd" with any three things. You do not have to give these parameters either, you can give any 3 strings you want:
python ex13.py stuff I like
python ex13.py anything 6 7
If you do not run it correctly, then you will get an error like this:
python ex13.py first 2nd
Traceback (most recent call last):
File "ex/ex13.py", line 3, in <module>
script, first, second, third = argv
ValueError: need more than 3 values to unpack
This happens when you do not put enough arguments on the command when you
run it (in this case just first 2nd
). Notice when I run it I give it
first 2nd
, which caused it to give an error about "need more than 3
values to unpack" telling you that you didn't give it enough parameters.
- Try giving fewer than three arguments to your script. See that error you get? See if you can explain it.
- Write a script that has fewer arguments and one that has more. Make sure you give the unpacked variables good names.
- Combine
raw_input
withargv
to make a script that gets more input from a user. - Remember that modules give you features. Modules. Modules. Remember this because we'll need it later.