参数解析:不要在 -h 上显示用法



代码

from argparse import ArgumentParser
p = ArgumentParser(description = 'foo')
p.add_argument('-b', '--bar', help = 'a description')
p.parse_args()

。结果输出:

$ python argparsetest.py -h
usage: argparsetest.py [-h] [-b BAR]
foo
optional arguments:
  -h, --help         show this help message and exit
  -b BAR, --bar BAR  a description

我想要的是:

$ python argparsetest.py -h
foo
optional arguments:
  -h, --help         show this help message and exit
  -b BAR, --bar BAR  a description

例如,寻求帮助时没有使用消息。有没有办法做到这一点?

绝对可能的 - 但我不确定记录...

from argparse import ArgumentParser,SUPPRESS
p = ArgumentParser(description = 'foo',usage=SUPPRESS)
p.add_argument('-b', '--bar', help = 'a description')
p.parse_args()

通过阅读源代码,我一起破解了一些东西,这在显示错误消息时似乎也有效......警告 - 这些东西大多没有文档,因此随时可能更改:-)

from argparse import ArgumentParser,SUPPRESS
import sys as _sys
from gettext import gettext as _
class MyParser(ArgumentParser):
    def error(self, message):    
        usage = self.usage
        self.usage = None
        self.print_usage(_sys.stderr)
        self.exit(2, _('%s: error: %sn') % (self.prog, message))
        self.usage = usage

p = MyParser(description = 'foo',usage=SUPPRESS)
p.add_argument('-b', '--bar', help = 'a description')
p.parse_args()

注意:要不显示特定参数的用法,请使用

parser.add_argument('--foo', help=argparse.SUPPRESS)

根据文档。

一个额外的说明:如果你根本不需要帮助,你可以用 add_help=False 构造解析器

def parse_args():
    parser = argparse.ArgumentParser(add_help=False)
    parser.add_argument("arg")
    return parser.parse_known_args()
def main():
    args, remaining = parse_args()
    print(args)
    print(remaining)
if __name__ == '__main__':
    main()

user@host % python3 /tmp/test.py  f
Namespace(arg='f')
[]
user@host % python3 /tmp/test.py  f -h
Namespace(arg='f')
['-h']
user@host % python3 /tmp/test.py  f -h --help
Namespace(arg='f')
['-h', '--help']
user@host % 

相关内容

  • 没有找到相关文章

最新更新