sys 模块提供了对解释器使用或维护的一些变量的访问,以及与解释器强烈交互的函数。Python sys 模块使用sys.argv 方法提供对任何命令行参数的访问。
如果你与命令行参数打交道,你可能想使用sys.argv。
Python sys.argv
sys.argv 是一个内置的Python命令,它列出了 所有的命令行参数。 len(sys.argv) 是命令行参数的总长度。sys.argv[0]是程序,也就是脚本名称。
让我们以sys.argv 命令为例,看看下面这个程序的输出。
# app.py
import sys
print('Number of arguments:', len(sys.argv), 'arguments.')
print ('Argument List:', str(sys.argv))
现在,进入你的命令行工具,输入下面的命令,参数后面是空格,点击回车,看看输出。
现在,分析一下输出。我们传递了六个参数,在参数列表中得到六个参数**。**
如上所述,我们的第一个参数总是脚本名称,它算在参数的数量里。所 以即使你没有给你的脚本传递任何参数,argv变量也总是至少包含一个元素,那就是脚本的名字。
Python argv 方法中的参数总是被解析为String。
如果你期望你的输入是任何其他的数据类型,你必须小心。
你可能需要根据你的要求对这些项目进行铸造或转换。
储存命令行参数
你可以将程序开始时给出的任何数量的参数存储在变量中。让我们看看下面的例子。
# app.py
import sys
print('Number of arguments:', len(sys.argv), 'arguments.')
print ('Argument List:', str(sys.argv))
data = sys.argv[2]
print('The argument three is:', data)
现在,在命令行中运行该文件,看看输出。
Python argv[0]和Python argv[1)
对于Python的每一次调用,sys.argv都自动是代表命令行上的参数的字符串列表(以空格分隔)。
这个名字来自 C 语言的惯例,其中argv和argc代表命令行参数。
但与此同时,这里有几个要点需要了解。
你可以创建一个脚本,按照参数的表示方式来打印参数。该命令还可以使用列表上的len()函数打印出参数的数量。
请看下面的例子。
#app.py
from __future__ import print_function
import sys
print(sys.argv, len(sys.argv))
请看输出。
➜ pyt python3 app.py
['app.py'] 1
➜ pyt
如果你调用这个脚本app.py,你可以用不同的参数调用它,看看会发生什么。
➜ pyt python3 app.py kl and kb
['app.py', 'kl', 'and', 'kb'] 4
➜ pyt
正如你所看到的,命令行参数包括一个脚本名称,但不包括解释器名称。
在这个意义上,Python 把这个脚本当作可执行文件。
如果你需要知道一个可执行程序的名字 (这里是指 Python),你可以使用sys.executable。
你可以从例子中看到,如果用户用引号封装的参数来调用脚本,就有可能收到确实包含空格的参数,所以你得到的是用户提供的参数列表。
现在在你的 Python 代码中,你可以使用这个字符串列表来输入你的程序。
由于基于零的整数对列表进行了索引,你可以使用 list[0] 语法获得各个项目,比如 sys.argv[0] 是文件名,sys.argv[1]、**sys.argv[2]**是其他的参数。
例如,我们来获取脚本的名称。
#app.py
from __future__ import print_function
import sys
script_name = sys.argv[0]
print(script_name)
请看输出结果。
➜ pyt python3 app.py kl and kb
app.py
➜ pyt
Python sys.argv[0]包含文件名。
Python sys.argv[1]包含传给你脚本的第一个命令行参数。
本教程就到此为止。

