4

コード

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

たとえば、助けを求めるときに使用法のメッセージはありません。これを行う方法はありますか?

4

3 に答える 3

6

間違いなく可能ですが、文書化されているかどうかはわかりません...

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()
于 2013-01-29T20:08:08.183 に答える
3

注:特定の引数の使用法を表示しない場合は、

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

ドキュメントごとに。

于 2018-05-04T16:08:12.313 に答える
0

1つの追加の注意:ヘルプがまったく必要ない場合は、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 % 
于 2020-12-30T15:14:07.163 に答える