如何解决sys.argv[1] 在脚本中的含义?

我想指出,以前的答案对用户的知识做了很多假设。 此答案试图在更教程级别回答问题。

对于 Python 的每次调用sys.argv都会自动生成一个字符串列表,该列表表示命令行上的参数(以空格分隔)。该名称来自C
编程约定
,其中 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 代码中,您可以使用这个字符串列表作为程序的输入。由于列表由从零开始的整数索引,因此您可以使用 list[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]的第一个命令行参数(作为 a
)。string它不会提示输入,但如果在脚本名称后面的命令行上没有提供任何参数,它将失败并返回 IndexError。

解决方法

我目前正在自学 Python,只是想知道(参考下面我的示例)以简化的方式sys.argv[1]表示什么。它只是要求输入吗?

#!/usr/bin/python3.1

# import modules used here -- sys is a very standard one
import sys

# Gather our code in a main() function
def main():
  print ('Hello there',sys.argv[1])
  # Command line args are in sys.argv[1],sys.argv[2] ..
  # sys.argv[0] is the script name itself and can be ignored

# Standard boilerplate to call the main() function to begin
# the program.
if __name__ == '__main__':
  main()