8wDlpd.png
8wDFp9.png
8wDEOx.png
8wDMfH.png
8wDKte.png

'sys.argv[1]' 是什么意思?(sys.argv 是什么,它来自哪里?)

user6685121 2月前

121 0

我目前正在自学 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.

帖子版权声明 1、本帖标题:'sys.argv[1]' 是什么意思?(sys.argv 是什么,它来自哪里?)
    本站网址:http://xjnalaquan.com/
2、本网站的资源部分来源于网络,如有侵权,请联系站长进行删除处理。
3、会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。
4、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
5、站长邮箱:yeweds@126.com 除非注明,本帖由user6685121在本站《regex》版块原创发布, 转载请注明出处!
最新回复 (0)
  • 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.argv 是模块的一个属性 sys 。它表示在命令行中传递给文件的参数。 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
    

    当您在终端中执行命令时,它确实很有帮助。首先检查参数的长度。如果没有传递参数,则执行帮助文本。

  • 通过命令行运行脚本时将参数传递给 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[0] 是您正在运行的脚本的路径,所有后续成员都是参数。

  • 在杰森的回答中添加几点:

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

    将 视为 sys.argv 字符串列表(Jason 提到)。因此,所有列表操作都将在此处应用。这称为“列表切片”。有关更多信息,请访问 此处 .

    语法如下: list[start:end:step] 。如果省略start,则默认为0,如果省略end,则默认为列表的长度。

    假设您只想采用第 3 个参数之后的所有参数,那么:

    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:]
    

    假设您需要最后两个参数。这里,start 为 -2,即倒数第二个项目,然后到末尾(用 表示 : ):

    user_args = sys.argv[-2:]
    

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

    user_args = sys.argv[:-2]
    

    假设您想要按相反的顺序排列参数:

    user_args = sys.argv[::-1]
    
  • Jani 2月前 0 只看Ta
    引用 7

    只需补充一下 Frederic 的答案,例如如果你按如下方式调用脚本:

    ./myscript.py foo bar

    sys.argv[0] 将是 \'./myscript.py\' sys.argv[1] 将是 \'foo\' 并且 sys.argv[2] 将是 \'bar\' ... 等等。

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

  • sys.argv 是一个列表。

    该列表由您的命令行创建,它是您的命令行参数的列表。

    例如:

    在命令行中输入如下内容,

    python3.2 file.py something
    

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

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

  • 我必须运行此命令:exec py C:\\project-open\\servers\\projop\\packages\\intranet-timesheet2\\www\\hours\\y.py 有没有办法对 python 文件使用相对路径?

  • sys.argv[1] 包含 传递给脚本的 argument 参数

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

    $ python3.1 hello.py foo

    或者:

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

    你的脚本将会打印:

    Hello there foo
  • @JasonR.Coombs 如果我通过导入模块直接调用 main(假设模块名称为 moduleA.py)并按 import moduleA; moduleA.main() 调用该函数,会发生什么情况?在这种情况下,没有命令行参数。那么 sys.argv[0] 是否仍应代表文件名,即它应该打印出 moduleA.py?

  • 引用 12

    @Guillaume:这是一个微妙的语义差异,但在 Python 中,诸如 sys.argv 之类的名称包含对对象的引用。因此从技术上讲,sys 模块的 argv 属性是对包含参数字符串的列表对象的引用。使用 give 或 returns 会暗示函数调用或生成器或其他构造。引用或表示可能是更精确的术语,但 is 已经足够接近了。

  • @JasonR.Coombs 我对这句话感到困惑:sys.argv **是**自动生成的字符串列表。你的意思是 \'gives\' 还是 \'return\'?

  • @NicholasLiu,如果你使用的是 Python 3,则无需添加它。我添加它是为了完整性。尝试在 Python 2 上不使用它运行,你会得到与我描述不同的结果。试一试。

  • 当您显示字符串列表 sys.argv 时,我想知道 from __future__ import print_function 这一行是做什么的。如果我不是在 Python 3 上运行而是在 Python 2 上运行,是否必须添加它?@Jason R. Coombs

  • 我想指出的是,之前的答案对用户的知识做了很多假设。这个答案试图从更教程的层面来回答这个问题。

    对于每次调用 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。

返回
作者最近主题: