argv
到底是什么东西!?
编辑:如果可以的话,请你写一两行并解释它是如何工作的?
试试这个简单的程序,把它命名为program.py
import sys
print sys.argv
并尝试执行
python program.py
python program.py a b c
python program.py hello world
注意什么是 argv 现在。
它表示参数向量,它包含传递给程序的参数。第一个始终是程序名称。
例如,如果你像这样执行你的 Python 程序......
$ python your_script.py --yes
...那么您的sys.argv
遗嘱将包含your_script.py
and --yes
。
在你浪费时间“开始学习一些更高级别的代码”之前,你需要学习如何找到这样的信息。知道如何查找一个不熟悉的函数/类/变量,而不必等待 30-60 分钟让 SO 上的人回答您(并且显然在此过程中获得多个反对票),将比添加一个更有用您的曲目中的一条信息。
从内置帮助:
>>> import sys
>>> help(sys)
…
argv -- command line arguments; argv[0] is the script pathname if known
…
这适用于任何模块。通常,模块中的各个类和函数具有更详细的信息(但这不适用于 argv,因为它只是一个list
,并且列表没有自定义帮助)。
系统。argv
传递给 Python 脚本的命令行参数列表。argv[0] 是脚本名称(它是否为完整路径名取决于操作系统)。如果命令是使用解释器的 -c 命令行选项执行的,则 argv[0] 设置为字符串“-c”。如果没有将脚本名称传递给 Python 解释器,则 argv[0] 是空字符串。
要遍历标准输入或命令行上给出的文件列表,请参阅 fileinput 模块。
谷歌搜索“python argv”的第一个网络结果是Python 作者 Guido 的一篇博客文章,对你来说可能有点太高级了,但第二个是关于“命令行参数”的教程。
正如大多数这些事情告诉您的那样,许多简单的脚本通常可以直接使用fileinput
而不是argv
直接处理,而更复杂的脚本通常需要使用argparse
(或optparse
,getopt
或其他替代方案,如果您需要使用 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 或其他没有内置算术的有缺陷的 shell 的人):
import sys
print(sum(int(arg) for arg in sys.argv[1:]))
您可以使用或不使用参数运行 python 程序。如果您使用参数,它们在 argv 向量内。例如
蟒蛇程序!!!
#!/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
结果是
Number of arguments: 4 arguments.
Argument List: ['test.py', 'arg1', 'arg2', 'arg3']
示例来自 教程点
如果您有一个可执行的 python 脚本并使用如下参数调用它:
myscript.py -a -b --input myfile --another_argument
然后sys.argv
是一个列表,其中包含:
['myscript.py', '-a', '-b', '--input', 'myfile', '--another_argument']
使用它是访问这些参数的唯一方法,这也是它的主要用途。但是,大多数应用程序使用argparse模块等库来访问此信息,而无需sys.argv
直接使用。
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 与文件名相同 。希望这会有所帮助。
感谢您的支持,改进了我对循环的回答。更多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 来遍历数组。:)
脚本 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 是您在脚本名称之后输入的参数列表。