argparse: 不显示 -h 时的用法

5 投票
3 回答
7613 浏览
提问于 2025-04-17 14:06

这段代码

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

比如,当我请求帮助时,不想看到使用说明。有没有什么办法可以做到这一点?

3 个回答

0

还有一点要说明的是:如果你根本不想要任何帮助信息,可以在构建解析器的时候设置 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 % 
7

注意:如果你想让某个参数不显示使用说明,可以使用

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

具体的用法可以参考官方文档

8

这绝对是可能的——不过我不太确定有没有相关的文档说明...

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: %s\n') % (self.prog, message))
        self.usage = usage


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

撰写回答