在Python中使用命令行参数:了解sys.argv

时间:2011-01-21 23:53:59

标签: python command-line-arguments argv

我目前正在阅读“学习Python的艰难之路”。我想这个例子可能已经过时了,所以我想在这里得到反馈。

我正在使用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

知道什么是错的吗?

11 个答案:

答案 0 :(得分:9)

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

enter image description here

答案 1 :(得分:4)

为了传递参数,您需要以这种方式运行脚本:

python fileName.py argument1 argument2

根据您拥有的变量数量= argv,这是您需要减去第一个参数(脚本)的数量。如,

 script, first, second, third = argv

应该有3个参数。

答案 2 :(得分:3)

sys.arg是命令行参数列表。您需要实际将命令行参数传递给脚本以填充此列表。可以在IDE的项目设置中执行此操作,也可以在命令行上执行此操作:

python script.py first second third

请注意,第一个参数始终是脚本的名称(在本例中为python script.py)。由于您使用了解包,每当您传递少于或多于3个参数时,您将获得ValueError。您可以在使用len(argv)-1解压缩之前检查号码,如果不是3,则会显示相应的错误。

在相关的说明中,如果您需要进行更复杂的参数传递,请查看getopt

答案 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()

答案 4 :(得分:0)

打开脚本时,您只需键入三个内容即可。例如,运行python(然后运行你的filename.py)1 2 3.“1,2和3”可以替换为任意三个数字或单词。

答案 5 :(得分:0)

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

python /path/ch13.py first second third

答案 6 :(得分:0)

执行如下代码:

python ch13.py first second third

答案 7 :(得分: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

答案 8 :(得分:0)

你可以做到

(script, first, second, third) = argv 

并传递3个参数

python filename arg1 arg2 arg3

从命令行运行它时。

我正在使用Python 3.6.0。在我没有将argv参数包装在大括号中之前。但现在它有效。

you can check it here

答案 9 :(得分:0)

我认为该示例将为您提供帮助。您可以传递所需的参数数量,即参数数量是可变的。 :D

def main(*args):
    print("Arguments Passed: ", args)

if __name__ == '__main__':
    name_Script, *script_args = sys.argv
    print("Name of the script: ", name_Script)
    main(*script_args) #Send list of arguments

答案 10 :(得分:0)

这是另一种写法:

*script_args = sys.argv