6

如果我将其用于getopt

import getopt
import sys

opts,args = getopt.getopt(sys.argv,"a:bc")
print opts
print args

opts将是空的。不会创建元组。但是,如果我使用sys.argv[1:],一切都会按预期进行。我不明白为什么会这样。有人愿意解释吗?

4

2 回答 2

16

sys.argv( )的第一个元素sys.argv[0]是当前正在执行的脚本的名称。因为这个脚本名称(很可能)不是一个有效的参数(并且可能不以 a---无论如何开头),getopt所以不会将其识别为参数。由于getopt工作方式的性质,当它看到不是命令行标志的东西(不以-or开头的东西--)时,它会停止处理命令行选项(并将其余参数放入args),因为它假设其余参数是程序将处理的项目(例如文件名或其他“必需”参数)。

于 2009-10-08T20:53:25.247 回答
7

这是设计使然。回想一下 sys.argv[0] 是正在运行的程序名称,而 getopt 不需要它。

从文档:

解析命令行选项和参数列表。args 是要解析的参数列表,没有对正在运行的程序的前导引用。通常,这意味着 sys.argv[1:]。options 是脚本想要识别的选项字母字符串,选项需要参数后跟冒号(':';即,与 Unix getopt() 使用的格式相同)。

http://docs.python.org/library/getopt.html

于 2009-10-08T20:51:45.110 回答