回答
这意味着参数矢量并且它包含传递给程序的参数。第一个始终是程序名称。
例如,如果你执行你的Python程序是这样的...
$ python your_script.py --yes
...那么你sys.argv
将包含your_script.py
和--yes
。
试试这个简单的程序,将其命名为program.py
import sys
print sys.argv
,并尝试执行
python program.py
python program.py a b c
python program.py hello world
注意的是argv的现在。
哈哈!万分感谢。那么,如果我总是必须在运行该程序时始终在终端/命令提示符中键入参数,它究竟有多有用呢? –
这很有用,因为有时候你想在不同的参数上多次运行相同的程序。可以考虑使用像ls这样的内置工具(如果你使用的是Windows,则可以使用“dir”)。你不需要一个工具来处理当前目录中的所有文本文件,另一个工具可以处理我主目录下的所有文件,包括隐藏文件等等。相反,你只需要一个工具,你可以输入'ls * .txt'或者'ls -a〜'或者其他任意组合。 – abarnert
+1,因为这显示了一种实验性地找到答案的有用方法,而不仅仅是重新说明文档中的内容。 – abarnert
你可以带或不带参数运行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
'str()'是不必要的。 –
如果你有一个可执行的Python脚本,并用这样的参数来调用它:
myscript.py -a -b --input myfile --another_argument
然后sys.argv
是包含一个列表:
['myscript.py', '-a', '-b', '--input', 'myfile', '--another_argument']
使用它来访问这些参数的唯一途径,而这是它的主要用途。但是,大多数应用程序使用库(如argparse模块)来访问此信息,而无需直接使用sys.argv
。
在您浪费时间“开始学习更高级别的代码”之前,您需要了解如何查找此类信息。知道如何查找不熟悉的函数/类/变量,而无需等待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
直接,而更复杂的脚本,经常需要用到(或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或其他有缺陷的炮弹没有内置算术):
import sys
print(sum(int(arg) for arg in sys.argv[1:]))
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遍历数组的习惯。 :)
感谢赞扬。进一步提高了我的答案是:多一点pythonian答案应该是这样的: – geekidharsh
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
脚本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中是您在脚本名称后输入的参数列表。
- 1. 什么是Thread.CurrentPrincipal,它有什么作用?
- 2. Javascript“窗口”:它的目的是什么?它有什么作用?
- 3. 为什么不argv工作?
- 4. 什么是newproxy,它有什么用处?
- 5. char * argv []是什么意思?
- 6. 什么是char * const argv []?
- 7. 写“@ARGV || ='。';”?有什么不对?
- 8. 我不知道什么是argv和raw_input()有什么不同?
- 9. 我的代码有什么问题?什么是argv [1]?
- 10. 它有什么作用?
- 11. mapRectThatFits:它有什么作用?
- 12. Expression.Invoke - 它有什么作用?
- 13. DefaultMemberAttribute - 它有什么作用?
- 14. flvFPW1() - 它有什么作用?
- 15. 它有什么作用?
- 16. 为什么$#ARGV 0?
- 17. 什么是PS3 Root密钥/它有什么作用/它是如何使用的?
- 18. Yii 2.0是什么?它有什么作用?
- 19. 什么是Dart“Expando”功能,它有什么作用?
- 20. .Net框架上的clr.dll是什么?它有什么作用?
- 21. .params到底是什么,它有什么作用?
- 22. `cache_line_align_`的作用是什么?它有什么好处?
- 23. 什么是REST响应,它有什么作用?
- 24. 什么是jQuery等同于此,它有什么作用?
- 25. 什么是博森,它有什么作用?
- 26. Android Bootstrap究竟是什么,它有什么作用?
- 27. 这是什么帕斯卡方言?它有什么作用?
- 28. 什么是Cygwin和它有什么作用
- 29. 什么是java中的对象,它有什么作用
- 30. '[]'之间的代码是什么?它有什么作用?
你知道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