为什么在完整传递sys.argv时getopt不起作用?
如果我在使用这个和 getopt
一起:
import getopt
import sys
opts,args = getopt.getopt(sys.argv,"a:bc")
print opts
print args
opts
会是空的。不会创建任何元组。不过,如果我使用 sys.argv[1:]
,一切就会正常工作。我不明白为什么会这样。有人能解释一下吗?
2 个回答
7
这是设计使然。记住,sys.argv[0] 是正在运行的程序名称,而getopt不需要这个信息。
根据文档:
解析命令行选项和参数列表。args 是要解析的参数列表,不包括运行程序的名称。通常,这意味着 sys.argv[1:]。options 是一个字符串,包含脚本希望识别的选项字母,要求参数的选项后面跟一个冒号(':';也就是和Unix的getopt()使用的格式一样)。
16
在 sys.argv
这个列表中,第一个元素 sys.argv[0]
是当前正在执行的脚本的名字。因为这个脚本的名字通常不是一个有效的参数(而且一般也不会以 -
或 --
开头),所以 getopt
不会把它当作参数来处理。getopt
的工作方式是这样的:当它遇到一个不是命令行标志的东西(也就是不以 -
或 --
开头的东西),它就会停止处理命令行选项,并把后面的参数放到 args
中,因为它认为后面的参数是程序需要处理的内容(比如文件名或者其他“必需”的参数)。