有没有办法说服 python 的 getopt 处理选项的可选参数?
根据 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)
结果是:
$ ./testopt.py -v
option -v requires argument
$ ./testopt.py -v 1
verbosity is 1
According to the documentation on python's getopt
(I think) the options fields should behave as the getopt()
function. However I can't seem to enable optional parameters to my code:
#!/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)
Results in:
$ ./testopt.py -v
option -v requires argument
$ ./testopt.py -v 1
verbosity is 1
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
getopt
不支持可选参数。如果选项很长,您可以这样做:这将导致空字符串值。
您可以找到
argparse
模块更加灵活。这取代了旧的optparse
模块。getopt
doesn't support optional parameters. in case of long option you could do:which will result in empty-string value.
You could find
argparse
module to be more flexible. This replaces the olderoptparse
module.不幸的是,没有办法。来自 optparse 文档:
编辑:哎呀,这是针对 optparse 模块而不是 getopt 模块,但是两个模块都没有“可选选项参数”的原因对于两者来说是相同的。
Unfortunately, there is no way. From the optparse docs:
EDIT: oops, that is for the optparse module not the getopt module, but the reasoning why neither module has "optional option arguments" is the same for both.
您可以使用 getopt 执行可选参数,如下所示:
用法:
You can do an optional parameter with getopt like this:
Usage:
如果您使用的是 2.3 或更高版本,您可能需要尝试 optparse 模块相反,因为它“更方便、更灵活、更强大……”,而且更新。唉,正如 Pynt 回答的那样,似乎不可能完全得到你想要的东西。
If you're using version 2.3 or later, you may want to try the optparse module instead, as it is "more convenient, flexible, and powerful ...", as well as newer. Alas, as Pynt answered, it doesn't seem possible to get exactly what you want.
python 的 getopt 应该真正支持可选参数,就像 GNU getopt 需要 '='
指定参数时使用。现在你可以很容易地模拟它,
有了这个约束,通过隐式地将 --option 更改为 --option=
IE,您可以指定 --option 需要一个参数,
然后将 --option 调整为 --option= 如下:
python's getopt should really support optional args, like GNU getopt by requiring '='
be used when specifying a parameter. Now you can simulate it quite easily though,
with this constraint by implicitly changing --option to --option=
I.E. you can specify that --option requires an argument,
and then adjust --option to --option= as follows: