你可以通过打开Python安装目录下的
optparse.py
文件来了解
optparse的工作原理。
在Windows上,该文件位于:
C:\Python27\Lib\optparse.py
“_match_abbrev”函数位于第1675行:
def _match_abbrev(s, wordmap):
"""_match_abbrev(s : string, wordmap : {string : Option}) -> string
Return the string key in 'wordmap' for which 's' is an unambiguous
abbreviation. If 's' is found to be ambiguous or doesn't match any of
'words', raise BadOptionError.
"""
if s in wordmap:
return s
else:
possibilities = [word for word in wordmap.keys()
if word.startswith(s)]
if len(possibilities) == 1:
return possibilities[0]
elif not possibilities:
raise BadOptionError(s)
else:
possibilities.sort()
raise AmbiguousOptionError(s, possibilities)
这句话的意思是:“_match_long_opt”被“_process_long_opt”调用,这两个函数都是在处理长选项时被调用的。”
这段文字提到了一个文档中的章节
this,其中说明了一个“opt_str”的概念。它是在命令行上触发回调的选项字符串。(如果使用缩写的长选项,则opt_str将是完整的规范选项字符串——例如,如果用户在命令行上输入“--foo”作为“--foobar”的缩写,则opt_str将是“--foobar”。)
如果我们将您提供的示例更改为:
from optparse import OptionParser
parser = OptionParser()
parser.disable_interspersed_args()
parser.add_option("-f", "--file", dest="filename")
parser.add_option("-z", "--film", dest="filmname")
(options, args) = parser.parse_args()
print options
使用测试用例
--fil
,您会收到一个错误:
error: ambiguous option: --fil (--file, --film?)
所以使用较短的名称是可以的,但如果存在歧义,optparse会停止。
--fi
和--f
对我也适用。我猜只要没有歧义,你可以少写一些字符。 - SiHa