我想指出,以前的答案提出了许多关于用户知识的假设。这个答案试图在更多的教程级别回答这个问题。
对于Python的每次调用,sys.argv
都会自动在命令行上显示表示参数(用空格分隔)的字符串列表。该名称来自C programming convention,其中argv和argc表示命令行参数。
当您熟悉Python时,您将需要了解更多关于列表和字符串的知识,但是与此同时,这里有几件事要知道。
您可以简单地创建一个脚本,用于在参数表示时打印参数。它还打印参数的数量,使用列表中的len
函数。
from __future__ import print_function
import sys
print(sys.argv, len(sys.argv))
该脚本需要Python 2.6或更高版本。如果你调用这个脚本print_args.py
,你可以用不同的参数调用它来看看会发生什么。
> python print_args.py
['print_args.py'] 1
> python print_args.py foo and bar
['print_args.py', 'foo', 'and', 'bar'] 4
> python print_args.py "foo and bar"
['print_args.py', 'foo and bar'] 2
> python print_args.py "foo and bar" and baz
['print_args.py', 'foo and bar', 'and', 'baz'] 4
如您所见,命令行参数包括脚本名称,但不包括解释器名称。从这个意义上说,Python将的脚本视为的可执行文件。如果您需要知道可执行文件的名称(本例中为python),则可以使用sys.executable
。
从示例中可以看出,如果用户使用封装在引号中的参数调用脚本,那么可以接收包含空格的参数,因此您得到的是用户提供的参数列表。
现在在你的Python代码中,你可以使用这个字符串列表作为你程序的输入。由于列表是由基于零的整数索引的,因此可以使用列表[0]语法获取单个项目。例如,获取脚本名称:
script_name = sys.argv[0] # this will always work.
尽管知道这很有趣,但您很少需要知道您的脚本名称。要获得脚本文件名后的第一个参数,你可以做到以下几点:
filename = sys.argv[1]
这是一个很常见的用法,但要注意,如果提供任何参数也将失败,并IndexError。
此外,利用Python可以参考一个列表的片段,因此要获得的只是用户提供的参数另一个列表(但没有脚本的名称),你可以做
user_args = sys.argv[1:] # get everything after the script name
此外, Python允许您将一系列项目(包括列表)分配给变量名称。所以,如果你希望用户始终提供两个参数,你可以指定这些参数(如字符串)两个变量:
user_args = sys.argv[1:]
fun, games = user_args # len(user_args) had better be 2
所以,在最终答案您的具体问题,sys.argv[1]
代表第一个命令行参数(作为string
)提供给相关脚本。它不会提示输入,但如果在脚本名称后面的命令行上没有提供参数,则它将失败并显示IndexError。
这是不是问题的一部分,它是非常古老的,但模块[argparse](https://docs.python.org/2/library/argparse.html#module-argparse),可能是更好的根据[this](http://stackoverflow.com/q/1009860/2886003) – Llopis 2014-04-04 13:14:13