sys.argv[1]在scrip中的含义

2024-04-24 10:58:51 发布

您现在位置:Python中文网/ 问答频道 /正文

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

Tags: thetonameinimport信息示例is
3条回答

sys.argv是一个列表。

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

例如:

在命令行中输入如下内容

python3.2 file.py something

sys.argv将成为列表['file.py','something']

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

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

对于Python的每次调用,sys.argv都是命令行上表示参数(用空格分隔)的字符串列表。名称来自C programming convention,其中argv和argc表示命令行参数。

在熟悉Python的同时,您还想了解更多关于列表和字符串的信息,但在此期间,有几点需要了解。

您可以简单地创建一个脚本,在参数被表示时打印它们。它还使用列表中的len函数打印参数的数量。

from __future__ import print_function
import sys
print(sys.argv, len(sys.argv))

脚本需要Python2.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]

这是一个非常常见的用法,但是请注意,如果没有提供参数,它将失败,并带有索引器错误。

另外,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)。它不会提示输入,但如果脚本名后面的命令行上没有提供参数,则它将失败并返回索引器错误。

sys.argv[1]包含传递给脚本的第一个command lineargument

例如,如果脚本名为hello.py,则发出:

$ python3.1 hello.py foo

或:

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

您的脚本将打印:

Hello there foo

相关问题 更多 >