如果我将其用于getopt
:
import getopt
import sys
opts,args = getopt.getopt(sys.argv,"a:bc")
print opts
print args
opts
将是空的。不会创建元组。但是,如果我使用sys.argv[1:]
,一切都会按预期进行。我不明白为什么会这样。有人愿意解释吗?
sys.argv
( )的第一个元素sys.argv[0]
是当前正在执行的脚本的名称。因为这个脚本名称(很可能)不是一个有效的参数(并且可能不以 a-
或--
无论如何开头),getopt
所以不会将其识别为参数。由于getopt
工作方式的性质,当它看到不是命令行标志的东西(不以-
or开头的东西--
)时,它会停止处理命令行选项(并将其余参数放入args
),因为它假设其余参数是程序将处理的项目(例如文件名或其他“必需”参数)。
这是设计使然。回想一下 sys.argv[0] 是正在运行的程序名称,而 getopt 不需要它。
从文档:
解析命令行选项和参数列表。args 是要解析的参数列表,没有对正在运行的程序的前导引用。通常,这意味着 sys.argv[1:]。options 是脚本想要识别的选项字母字符串,选项需要参数后跟冒号(':';即,与 Unix getopt() 使用的格式相同)。