python - "sys.argv[1]"是什么意思?

我目前正在自学 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 的工作原理。

如果您已经阅读并理解了答案,但在Windows上仍然遇到问题,请检查 Python Script does not take sys.argv in Windows解决了这个问题。如果您尝试从 IDE 内部运行程序,您可能需要特定于 IDE 的帮助 - 请搜索,但首先检查您是否可以从命令行成功运行程序。

最佳答案

我想指出,以前的答案对用户的知识做了很多假设。这个答案试图在更教程的层次上回答这个问题。

对于 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 代码中,您可以使用这个字符串列表作为程序的输入。由于列表由从零开始的整数索引,因此您可以使用 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。

关于python - "sys.argv[1]"是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4117530/

相关文章:

regex - sed - 注释与特定字符串匹配且尚未注释掉的行

c++ - .o 文件与 .a 文件

linux - 在 Linux 中注册文件扩展名/mime 类型

linux - 使用 Wget 发布请求?

python - 如何使用列的格式字符串显示 float 的pandas DataFrame?

python - 如何找到列表交集?

python - 以 Unix 时间戳格式获取当前 GMT 时间的最简单方法是什么?

linux - 如何使用调试版的 libc

python - 在单行中打印不带括号的列表

linux - initrd 和 initramfs 的区别?