sts*_*uad 6 python getopt getopt-long
根据python的文档getopt(我认为),选项字段应该表现为getopt()函数.但是我似乎无法为我的代码启用可选参数:
#!/usr/bin/python
import sys,getopt
if __name__ == "__main__":
try:
opts, args = getopt.gnu_getopt(sys.argv[1:], "v::", ["verbose="])
except getopt.GetoptError, err:
print str(err)
sys.exit(1)
for o,a in opts:
if o in ("-v", "--verbose"):
if a:
verbose=int(a)
else:
verbose=1
print "verbosity is %d" % (verbose)
Run Code Online (Sandbox Code Playgroud)
结果是:
$ ./testopt.py -v
option -v requires argument
$ ./testopt.py -v 1
verbosity is 1
Run Code Online (Sandbox Code Playgroud)
getopt不支持可选参数.如果选项很长,你可以这样做:
$ ./testopt.py --verbose=
Run Code Online (Sandbox Code Playgroud)
这将导致空字符串值.
您可以发现argparse模块更灵活.
不幸的是,没有办法.来自optparse文档:
通常,给定选项要么是参数,要么不是.很多人都想要一个"可选的选项参数"功能,这意味着如果他们看到某些选项将采用参数,如果他们不这样做则不会.这有点争议,因为它使解析变得模糊:如果"-a"采用可选参数而"-b"完全是另一种选择,我们如何解释"-ab"?由于这种模糊性,optparse不支持此功能.
编辑: oops,对于optparse模块而不是getopt模块,但是为什么两个模块都没有"可选选项参数"的原因对两者都是相同的.