我目前正在自学 Python,我只是想知道(参考下面的示例) sys.argv[1] 用简单的术语代表什么。它只是要求输入吗?#!/usr/bin/pyt...
我目前正在自学 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()
您可能被引导到这里,因为您询问的是使用sys.argv
的代码中的IndexError
。问题不在于您的代码;问题在于您需要以使sys.argv
包含正确值的方式运行程序。请阅读答案以了解sys.argv
工作原理。
If you have read and understood the answers, and are still having problems on Windows , check if Python 脚本是否不采用 Windows 中的 sys.argv 来 fixes the issue. If you are trying to run the program from inside an IDE , you may need IDE-specific help - please search, but first check if you can run the program successfully from the command line.
我想指出的是,之前的答案对用户的知识做了很多假设。这个答案试图从更教程的层面来回答这个问题。
对于每次调用 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]
表示提供给相关脚本的第一个命令行参数(作为 string
)。它不会提示输入,但如果在脚本名称后面的命令行上没有提供任何参数,它将失败并出现 IndexError。