什么是“argv”,它有什么作用?

时间:2012-11-07 05:57:45

标签: python

的argv

它究竟是什么地方!?

编辑:如果可以的话,请你写一两行并解释它是如何工作的?

7 个答案:

答案 0 :(得分:23)

尝试使用此简单程序,将其命名为program.py

import sys
print sys.argv

并尝试执行

python program.py
python program.py a b c
python program.py hello world

注意现在是什么argv。

答案 1 :(得分:13)

它意味着 arguments vector ,它包含传递给程序的参数。第一个始终是程序名称。

例如,如果你执行了Python程序......

 $ python your_script.py --yes

...然后您的sys.argv将包含your_script.py--yes

答案 2 :(得分:12)

在浪费时间“开始学习更高级别的代码”之前,您需要学习如何查找这样的信息。知道如何查找一个不熟悉的函数/类/变量,而不必等待30-60分钟让SO上的人回答你(并且显然在这个过程中支持多个downvotes),将比添加一个更有用你的曲目信息。

来自内置帮助:

>>> import sys
>>> help(sys)
…
argv -- command line arguments; argv[0] is the script pathname if known
…

这适用于任何模块。通常,模块中的单个类和函数具有更详细的信息(但这对于argv不起作用,因为它只是list,并且列表没有自定义帮助。)

如果信息不足,the documentation(或the 2.x documentation)说:

  

SYS。的的argv

     

传递给Python脚本的命令行参数列表。 argv [0]是脚本名称(无论这是否是完整路径名,它依赖于操作系统)。如果使用解释器的-c命令行选项执行命令,则将argv [0]设置为字符串'-c'。如果没有脚本名称传递给Python解释器,则argv [0]为空字符串。

     

要循环标准输入或命令行上给出的文件列表,请参阅fileinput模块。

Google搜索“python argv”的第一个网址结果是a blog post by Python author Guido,对您来说可能有点过于先进,但第二个结果是a tutorial在“命令行参数”上。

正如大多数这些事情告诉你的那样,许多简单的脚本通常只能使用fileinput而不是直接处理argv,而更复杂的脚本通常需要使用argparse(或{ {1}},optparse或其他替代方案,如果您需要使用Python 2.6或更早版本。)

getopt恰到好处的一个例子就是这个简单的程序将相对路径名转换为绝对路径(对于那些不在linux或其他平台上的那些带有abspath,GNU readlink或类似工具的人来说 - 在):

sys.argv

或者这个“添加”工具只添加了一堆数字(对于那些坚持使用cmd.exe或其他没有内置算术的有缺陷的shell):

import os, sys
print('\n'.join(os.path.abspath(arg) for arg in sys.argv[1:]))

答案 3 :(得分:5)

您可以使用或不使用参数运行python程序。如果使用参数,则它们位于argv向量中。例如

PYTHON PROGRAM !!!

#!/usr/bin/python

import sys

print 'Number of arguments:', len(sys.argv), 'arguments.'
print 'Argument List:', str(sys.argv)

像这样运行脚本

$ python test.py arg1 arg2 arg3

AND RESULT IS

Number of arguments: 4 arguments.
Argument List: ['test.py', 'arg1', 'arg2', 'arg3']

示例来自 tutorialspoint

答案 4 :(得分:2)

如果你有一个可执行的python脚本并用这样的参数调用它:

myscript.py -a -b --input myfile --another_argument

然后sys.argv是一个包含以下内容的列表:

['myscript.py', '-a', '-b', '--input', 'myfile', '--another_argument']

使用它是访问这些参数的唯一方法,这是它的主要用途。但是,大多数应用程序使用argparse模块等库来访问此信息,而无需直接使用sys.argv

答案 5 :(得分:2)

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

它将参数存储在列表ds。

样本用法: 创建一个文件说:cmdlineargs.py并在其中加入以下内容:

import sys
print sys.argv 

现在在你的终端/ cli中运行文件:

python cmdlineargs.py 

或类似

python cmdlineargs.py example example1

注意现在发生了什么。运行该脚本时,您的脚本将打印cmd行参数中传递的所有内容。

重要的是要知道:

print len(sys.argv) #total arguments passed
sys.argv[0] #this is your script name stored in sys.argv.
print sys.argv #display all arguments passed
sys.argv[0] #is the first argument passed, which is basically the filename.
sys.argv #stores all cmd line args in a list ds

你可以查找像这样传递的每个特定参数,可能是:

cmdLineArg = len(sys.argv)
i=0
for argv in sys.argv:
    if cmdLineArg<=len(sys.argv) :
        print "argument",i,"is", str(sys.argv[i])
        i=i+1
    else:
        print "Only script name in sys.argv"

示例结果:

假设您在终端中运行以下内容。

python cmdlineargs.py example example1

您的结果应该类似于:

argument 0 is cmdlineargs.py
argument 1 is example
argument 2 is example1  

注意参数0与文件名相同。希望这有用。

感谢upvotes,改进了我对循环的回答。更多的蟒蛇回答应该是这样的:

i=0
for argv in sys.argv:
    if cmdLineArg==1:
        print "Only script name in sys.argv"
    elif (cmdLineArg>1 and cmdLineArg<=len(sys.argv)):
        print "argument ",i,"is", str(argv)
        i=i+1
print "total arguments passed:\t", totalargs

我也是python的新手,所以我习惯于为遍历数组声明i和j。 :)

答案 6 :(得分:1)

脚本printArgv.py:

import sys
print sys.argv.__class__
spam = sys.argv[1:]
print spam

运行它: python printArgv.py 1 2 3 4 5

你会找到输出:

<type 'list'>
['1', '2', '3', '4', '5']

这意味着sys.argv是您在脚本名称后输入的参数列表。