2011-01-21 30 views
5

我目前正在通过学​​习Python The Hard Way。我认为这个例子可能过时了,所以我想在这里得到反馈。在Python中使用命令行参数:理解sys.argv

我使用Python 3.1

from sys import argv 

script, first, second, third = argv 

print("the script is called:", (script)) 
print("your first variable is:", (first)) 
print("your second variable is:", (second)) 
print("your third variable is:", (third)) 

我得到这个错误:

Traceback (most recent call last): 
    File "/path/ch13.py", line 3, in <module> 
    script, first, second, third, bacon = argv 
ValueError: need more than 1 value to unpack 

任何想法有什么不对?

回答

8

您忘记将参数传递给脚本,例如foo.py bar baz quux

enter image description here

+0

我是小白,什么是这样做的代码我已经写了正确的方法是什么? – 2011-01-21 23:59:32

+0

`foo.py bar baz quux` – 2011-01-22 00:00:21

3

sys.arg是命令行参数的列表。您需要实际将命令行参数传递给脚本以填充此列表。做到这一点无论是在IDE的项目设置或者在命令行上运行这样的:

python script.py first second third 

注意,第一个参数始终是脚本的名称(python script.py在这种情况下)。由于您使用拆包,只要您传递的参数少于或多于3个,就会得到ValueError。您可以使用len(argv)-1拆包,如果没有3

呈现一个合适的错误与此相关的前检查的数量,看看getopt,如果你需要做更复杂的参数传递。

4

为了传递参数,你将需要运行这样的脚本:

python fileName.py argument1 argument2 

取决于你有多少个变量具有=到argv,这是你需要多少有负第一参数(脚本)。例如,

script, first, second, third = argv 

应该有3个参数。

0

您试图将argv解包为单独的值。解包需要确切数量的值与要解包的值的大小相匹配。试想一下:

a, b, c = [1, 2, 3] 

工作正常,但这样的:

a, b, c, d, e = [1] 

会给你同样难看的错误,您刚刚产生的。以你所做的方式解压sys.argv尤其糟糕,因为它是用户输入,而且你不知道脚本的用户将提供多少个参数。所以你应该更仔细地解开它:

if len(argv) == 5: 
    script_name, a, b, c, d = argv 
else: 
    print "This script needs exactly four arguments, aborting" 
    exit() 
0

所有你需要做的是打开脚本时输入任何三件事情。例如,运行python(然后是你的filename.py)1 2 3,“1,2和3”可以用任何三个数字或单词替换。

0

为了在命令行上运行此脚本,您需要使用三个参数。 您必须键入类似如下的内容:

python /path/ch13.py first second third 
0

执行这样的代码:

python ch13.py first second third 
0
from sys import argv 
a, b, c, d = argv 
print "The script is called:", a 
print "Your first variable is:", b 
print "Your second variable is:", c 
print "Your third variable is:", d 

保存此脚本:s.py

运行此脚本从终端如下: enter image description here

0

你可以做

(script, first, second, third) = argv 

,并通过3个参数

python filename arg1 arg2 arg3 

,当你在命令行运行它。

我正在使用Python 3.6.0。在我没有把大括号中的argv参数包裹起来之前。但现在它起作用了。

you can check it here