from sys import argv - what is the function of "script"
Asked Answered
S

4

15

I am reading "Learn Python the Hard Way" and was confused by the "script" part of the second line.

from sys import argv
script, filename = argv

From what I understand, the second line says: script and filename comprise argv. I tried running my code without the "script" part and it worked just fine. I'm not sure what the purpose of it is.

Shafting answered 2/12, 2012 at 4:15 Comment(2)
Actually, I don't understand the first line from sys. Could somebody explain it to me? I am new to python.Heavyset
Actually running the code without script throws an error TypeError: coercing to Unicode: need string or buffer, list foundTyburn
C
16

Generally, the first argument to a command-line executable is the script name, and the rest are the expected arguments.

Here, argv is a list that is expected to contain two values: the script name and an argument. Using Python's unpacking notation, you can write

script = argv[0]
filename = argv[1]

as

script, filename = argv

while also throwing errors if there are an unexpected number of arguments (like one or three). This can be a good idea, depending on one's code, because it also ensures that there are no unexpected arguments.

However, the following code will not result in filename actually containing the filename:

filename = argv

This is because filename is now the argument list. To illustrate:

script, filename = argv
print("Script:", script)  # Prints script name
print("Filename:", filename)  # Prints the first argument

filename = argv
print("Filname:", filename)  # Prints something like ["my-script.py", "my-file.txt"]
Cecil answered 2/12, 2012 at 4:21 Comment(0)
M
5

Others have explained what is script, but the python statement is called unpacking and is usually applied to tuples or sequences.

It is a shortcut way of assigning a variable for each value that is in the tuple (or sequence) to the right of the = sign.

It is not something specific to argv:

>>> a,b = ('Hello','World')
>>> a
'Hello'
>>> b
'World'

One thing to keep in mind is that the number of variables on the left side must match the number of items in the sequence on the right, else you get:

>>> a,b,c = ('Hello','World')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: need more than 2 values to unpack
>>> a,b = ('Hello','World','!')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: too many values to unpack
Monophony answered 2/12, 2012 at 4:22 Comment(0)
I
3

argv is a list of the arguments to your program. Standard shell behavior includes the name of the program itself as the first argument in argv.

Python can assign multiple values at once if the number of variables on the left hand side equals the size of the list on the right hand side (it can also handle more cases, but that is the most basic). E.g.

script, filename = argv

is the same as

script = argv[0]
filename = argv[1]

Note also that that script will raise a ValueError if argv does not have exactly two elements.

Insuperable answered 2/12, 2012 at 4:26 Comment(0)
Q
2

The first item in argv is the name of the Python script you're running. Any additional arguments (the filename, in this case) are arguments passed to this script.

These two arguments are assigned the names script and filename. It's entirely possible that script is never used again; it's basically a placeholder. If you remove it, however, you'd do filename = argv[1] instead.

Quota answered 2/12, 2012 at 4:18 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.