“ 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是如何工作的。

如果您已经阅读和理解了答案,并仍然有问题 在视窗上,检查是否 Python 脚本在 Windows 中不使用 sys.argv修复的问题。如果您试图运行程序 从 IDE 内部,您可能需要 IDE 特定的帮助-请搜索,但首先检查是否可以从命令行成功运行该程序。

551225 次浏览

Argv [1] 包含传递给脚本的第一个 命令行 争论

例如,如果您的脚本名为 hello.py,并且您发出:

$ python3.1 hello.py foo

or:

$ chmod +x hello.py  # make script executable
$ ./hello.py foo

你的剧本会打印出来:

Hello there foo

Argv 是一个包含脚本路径和命令行参数的列表; 也就是说,sys.argv [0]是正在运行的脚本的路径,以下所有成员都是参数。

只是添加 Frederic 的答案,例如,如果你调用你的脚本如下:

./myscript.py foo bar

sys.argv[0]应该是“ ./myscript.py” sys.argv[1]应该是“ foo”和 sys.argv[2]应该是“ bar”... 等等。

在示例代码中,如果按照 ./myscript.py foo 调用脚本,脚本的输出将是“ Hello there foo”。

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

对于 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。

sys.argv是一个列表。

这个列表是由命令行创建的,它是命令行参数的列表。

例如:

在命令行中输入这样的内容,

python3.2 file.py something

sys.argv将变成一个列表[‘ file.py’,‘ something’]

在这种情况下 sys.argv[1] = 'something'

给杰森的回答再加几分:

用于获取所有用户提供的参数: user_args = sys.argv[1:]

sys.argv视为一个字符串列表(由 Jason 提到)。所以所有的列表操作都将在这里应用。这就是所谓的“列表切片”。更多信息请访问 给你

语法如下: list[start:end:step]。如果您省略开始,它将默认为0,如果您省略结束,它将默认为列表长度。

假设你只想在第三个论点之后取所有的论点,那么:

user_args = sys.argv[3:]

假设您只需要前两个参数,那么:

user_args = sys.argv[0:2]  or  user_args = sys.argv[:2]

假设你想要参数2到4:

user_args = sys.argv[2:4]

假设您想要最后一个参数(最后一个参数总是 -1,所以这里发生的是我们从后面开始计数。所以开始是最后,没有结束,没有步骤) :

user_args = sys.argv[-1]

假设你想要第二个最后一个论点:

user_args = sys.argv[-2]

假设您想要最后两个参数:

user_args = sys.argv[-2:]

假设您想要最后两个参数。在这里,开始是 -2,这是倒数第二项,然后到结束(由 :表示) :

user_args = sys.argv[-2:]

假设您想要除最后两个参数之外的所有内容。这里,start 是0(默认情况下) ,end 是倒数第二项:

user_args = sys.argv[:-2]

假设你想让参数按相反的顺序排列:

user_args = sys.argv[::-1]

向 Python 脚本传递参数 当通过命令行运行脚本时

> python create_thumbnail.py test1.jpg test2.jpg

这里, 脚本名-create _ thumbnail.py, 参数1-test1.jpg, 参数2-test2.jpg

在我使用的 create _ thumbnail.py 脚本中

sys.argv[1:]

它给出了我在命令行中传递的参数列表 ['test1.jpg', 'test2.jpg']

Sys.argv 将显示运行脚本时传递的命令行参数,或者可以说 sys.argv 将存储从终端运行时在 python 中传递的命令行参数。

试试这个:

import sys
print sys.argv

Argv 存储在 Python 列表中传递的所有参数。以上将打印所有传递的参数将运行脚本。

现在试着这样运行 filename.py:

python filename.py example example1

这将在一个列表中打印3个参数。

sys.argv[0] #is the first argument passed, which is basically the filename.

类似地,argv[1]是传递的第一个参数,在本例中为 'example'

sys.argvsys模块的一个属性。它表示在命令行中传递到文件中的参数。sys.argv[0]捕获文件所在的目录。sys.argv[1]返回命令行中传递的第一个参数。想象一下我们有一个 example.py 文件。

Py

import sys # Importing the main sys module to catch the arguments
print(sys.argv[1]) # Printing the first argument

现在在命令提示符中,我们这样做:

python example.py

它将在第2行抛出索引错误。因为还没有通过参数。您可以看到用户使用 if len(sys.argv) >= 1: # Code传递的参数的长度。 如果我们运行 example.py 并传递一个参数

python example.py args

它打印:

args

因为这是第一次争论!假设我们使用 PyInstaller 将其制作成一个可执行文件。我们会这样做:

example argumentpassed

它打印:

argumentpassed

当你在终端发出指令的时候,这真的很有帮助。首先检查参数的长度。如果没有传递参数,则执行帮助文本。