打印单个脚本参数会重复打印所有这些参数

时间:2015-12-24 23:51:39

标签: python windows

我正在阅读“艰难学习Python”,我正在练习13,但我遇到了一些麻烦。每当我打开命令行并运行脚本并输入我的参数变量时,它总是在每一行都重复,如下所示:

C:\users\blah\> program.py first second third
The script is called:['program.py','first','second','third']
Your first variable is:['program.py','first','second','third']
Your second variable is:['program.py','first','second','third']
Your third variable is:['program.py','first','second','third']

所以不是在每一行都看到这个,而是我的目标是不会像这样重复每一行(没有括号):

C:\users\blah\> program.py first second third
The script is called:'program.py'
Your first variable is:'first'
Your second variable is:'second'
Your third variable is:'third'  

这是我的原始代码。注意我在Python 3.5上,即使它被指定使用2.7。

from sys import argv

script = argv
first = argv
second = argv
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)

非常确定整个变量部分都已关闭。

2 个答案:

答案 0 :(得分:0)

您尚未发布代码,但这是一个非常简单的问题。当您提供命令行参数时,python将其视为list。所以,当我说

import sys

print sys.argv

然后从命令行输入:

python program.py first second third

输出是你得到的,即所有变量作为列表。为了使单词单独使用list indices。因此,要获得第一个参数,请使用sys.argv[0],这将提供program.py

所以你的代码就像这样:

import sys

print 'script name:', sys.argv[0]
print '1st var:', sys.argv[1]
#and so on

答案 1 :(得分:0)

示例中的代码是:

from sys import argv

script, first, second, third = argv

当您使用program.py first second third执行脚本时,argv将成为一个列表,其中包含脚本名称,后跟每个脚本参数。所以argv就变成了这个:

argv = ['program.py', 'first', 'second', 'third']

原始代码中的行'解包'该列表的成员并将它们分配给各个变量。它相当于:

script = argv[0]
first = argv[1]
second = argv[2]
third = argv[3]

这只是表达上述内容的一种更简洁的方式。这个解包语法是Zed Shaw试图用这个例子教授的东西之一。当您将程序更改为:

script = argv
first = argv
second = argv
third = argv
打开&#39>拆包'离开 - 你的每个变量只是引用整个列表,正如你可以从修改过的程序的输出中看到的那样。