由于某种原因,我的程序有非标准命令行选项。我的程序接受一个长选项,也带有一个“-”。例如,有效的命令行选项是“-f”/“-foo”。短选项和长选项都需要有一个用空格或“=”分隔的参数。
我正在尝试使用 optparse 来解析它,但我知道 optparse 不支持非 GNU 标准选项。有没有办法调整 optparse 来做到这一点?
最佳答案
这是一种稍微有点黑客的方式来完成您需要的事情。
子类Option
和OptionParser
并修补一些方法:
from optparse import Option, OptionError, OptionParser
class MyOption(Option):
def _set_opt_strings(self, opts):
for opt in opts:
if len(opt) < 2:
raise OptionError(
"invalid option string %r: "
"must be at least two characters long" % opt, self)
elif len(opt) == 2:
self._short_opts.append(opt)
else:
self._long_opts.append(opt)
class MyOptionParser(OptionParser):
def _process_args(self, largs, rargs, values):
while rargs:
arg = rargs[0]
if arg == "--":
del rargs[0]
return
elif arg[0:2] == "--":
self._process_long_opt(rargs, values)
elif arg[:1] == "-" and len(arg) > 1:
if len(arg) > 2:
self._process_long_opt(rargs, values)
else:
self._process_short_opts(rargs, values)
elif self.allow_interspersed_args:
largs.append(arg)
del rargs[0]
else:
return
现在你可以做
parser = MyOptionParser()
parser.add_option(MyOption("-f", "-file", dest="filename",
help="write report to FILE", metavar="FILE"))
parser.add_option(MyOption("-q", "-quiet",
action="store_false", dest="verbose", default=True,
help="don't print status messages to stdout"))
有了这个,解析器
将接受-file
作为选项(并且不会接受例如-fq
)。
关于python - 在 python 中使用 optparse 解析非 GNU 标准选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15799194/