2012-11-07 139 views
4

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

地球上这是什么!?

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

+6

你知道Python的内置'help'吗?只需启动一个解释器,输入'import sys',然后输入'help(sys)',它会显示“argv - 命令行参数; argv [0]是脚本路径名,如果已知的话”。或者,查看联机文档(http://docs.python.org/2/library/sys.html for 2.7,http://docs.python.org/3/library/sys.html for 3.3)。你会发现比在SO上提出问题更快的方法,并等待一个小时让人们为你工作。 (如果你无法找到文档,就像德米特里说的,谷歌是你的朋友。) – abarnert

回答

10

这意味着参数矢量并且它包含传递给程序的参数。第一个始终是程序名称。

例如,如果你执行你的Python程序是这样的...

$ python your_script.py --yes 

...那么你sys.argv将包含your_script.py--yes

21

试试这个简单的程序,将其命名为program.py

import sys 
print sys.argv 

,并尝试执行

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

注意的是argv的现在。

+0

哈哈!万分感谢。那么,如果我总是必须在运行该程序时始终在终端/命令提示符中键入参数,它究竟有多有用呢? –

+2

这很有用,因为有时候你想在不同的参数上多次运行相同的程序。可以考虑使用像ls这样的内置工具(如果你使用的是Windows,则可以使用“dir”)。你不需要一个工具来处理当前目录中的所有文本文件,另一个工具可以处理我主目录下的所有文件,包括隐藏文件等等。相反,你只需要一个工具,你可以输入'ls * .txt'或者'ls -a〜'或者其他任意组合。 – abarnert

+3

+1,因为这显示了一种实验性地找到答案的有用方法,而不仅仅是重新说明文档中的内容。 – abarnert

5

你可以带或不带参数运行Python程序。如果你使用参数,它们在argv向量中。例如

Python程序!

#!/usr/bin/python 

import sys 

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

RUN SCRIPT像这样

$ python test.py arg1 arg2 arg3 

AND结果为

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

实例是从 tutorialspoint

+0

'str()'是不必要的。 –

2

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

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

然后sys.argv是包含一个列表:

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

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

+0

的确,这是访问这些参数的唯一方法(除了在Windows上),但这有点让人误解。很多时候你会用'fileinput'或'argparse'来代替 - 当然这些模块本身也使用'sys.argv'来访问参数,但作为一个用户你不需要知道这一点。 – abarnert

+0

这就是我最后一句话应该表明的意思,但也许它不是很清楚...... – aquavitae

+0

是的,我只是建议让它更清楚一点 - 它已经在技术上是正确的。 – abarnert

9

在您浪费时间“开始学习更高级别的代码”之前,您需要了解如何查找此类信息。知道如何查找不熟悉的函数/类/变量,而无需等待30-60分钟让SO上的人回答您(并且显然会在过程中架起多个降价提示),这将比添加更多一条信息到你的曲目。

从内置的帮助:

>>> 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模块。

为谷歌搜索“蟒蛇argv的”第一个网页结果是a blog post by Python author Guido这可能是一个有点太为您先进的,但第二个是a tutorial的“命令行参数”。

由于大部分的这些事情告诉你,很多简单的脚本往往只使用fileinput,而不是处理argv直接,而更复杂的脚本,经常需要用到​​(或optparsegetopt,或其他替代品,如果你需要使用Python 2.6或更早版本)。

其中sys.argv恰到好处的一个示例是将相对路径名转换为绝对路径的简单程序(对于那些不在linux或其他带有abspath,GNU readlink或类似内置工具的平台的用户):

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

或者这“增加”的工具,只是增加了一串数字(对于那些套牢的cmd.exe或其他有缺陷的炮弹没有内置算术):

import sys 
print(sum(int(arg) for arg in sys.argv[1:])) 
2

sys .argv将显示通讯并在运行脚本时传递行参数,或者您可以说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,提高我对循环答案。多一点pythonian答案应该是这样的:

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遍历数组的习惯。 :)

+0

感谢赞扬。进一步提高了我的答案是:多一点pythonian答案应该是这样的: – geekidharsh

+0

cmdLineArg = LEN(sys.argv中) I = 0 在sys.argv中的argv: 如果cmdLineArg == 1: \t打印“只有脚本名在sys.argv“ elif(cmdLineArg> 1和cmdLineArg <= len(sys.argv)): print”argument“,i,”is“,str(argv) i = i + 1 print”通过:\ t“,totalargs – geekidharsh

0

脚本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中是您在脚本名称后输入的参数列表。

相关问题