我目前正在自学 Python,只是想知道(参考下面我的示例)以简化的方式sys.argv[1]表示什么。它只是要求输入吗?
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()
我想指出,以前的答案对用户的知识做了很多假设。 此答案试图在更教程级别回答问题。
对于 Python 的每次调用,sys.argv都会自动生成一个字符串列表,该列表表示命令行上的参数(以空格分隔)。该名称来自C 编程约定,其中 argv 和 argc 表示命令行参数。
sys.argv
当您熟悉 Python 时,您会想了解更多关于列表和字符串的信息,但与此同时,这里有一些事情要知道。
您可以简单地创建一个脚本来打印所表示的参数。它还使用len列表中的函数打印参数的数量。
len
from __future__ import print_function import sys print(sys.argv, len(sys.argv))
该脚本需要 Python 2.6 或更高版本。如果你调用这个脚本print_args.py,你可以用不同的参数调用它,看看会发生什么。
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.
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。
string