argparseを用いてsamtoolsのようなサブコマンドを実現し,サブプログラムを用いてそれぞれのヘルプドキュメントを形成する

13450 ワード

文書ディレクトリ
  • 概要
  • add_を使用サブドキュメント
  • を作成するためにsubparsers()
  • set_を使用default()は、それぞれの機能のパラメータ
  • を管理する
    概要
    多くの場合、私たちのプログラムは多くの機能ブロックを実現する必要があります.これらの機能ブロックを別々に実現するのは良いアイデアですが、argparseは読みやすい自己コマンドとヘルプドキュメントを実現するのに役立ちます.この文書では、argparseを使用して、複数の機能を持つプログラムを機能的に区分し、それぞれのサブプログラムのヘルプドキュメントを書く方法について説明します.リファレンスドキュメントはargparsehttps://docs.python.org/3/library/argparse.html公式ドキュメント
    add_の使用サブドキュメントを作成するにはsubparsers()
    argparse.ArgumentParser()インスタンスを作成した後、add_subparsers()はサブコマンドを追加しましたadd_subparsers()には1つの方法しかありませんadd_parser()は、サブコマンドを作成するために使用できます.add_subparsers()には、titleやdescription、helpなどのオプションのパラメータもあり、サブコマンドヘルプの表示を調整します.簡単な例を見てみましょう
    import argparse
    parser = argparse.ArgumentParser(
                                     prog='subparser_test'
    )
    subparsers = parser.add_subparsers(title='subcommands',
                          description='valid subcommands',
                          help='additional help'
    )
    foo_function = subparsers.add_parser('foo',help='foo subcommand')
    foo_function.add_argument('x', type=int, help='an integer')
    foo_function.add_argument('y', type=int, help='another integer')
    bar_function = subparsers.add_parser('bar',help='bar subcommand')
    bar_function.add_argument('a', type=str, help='a help')
    

    上記のコードでは、fooとbarという2つのサブコマンドを作成しました.次に、プログラムのヘルプコマンドを見てみましょう.
    parser.print_help()#      
    usage: subparser_test [-h] {foo,bar} ...
    
    optional arguments:
      -h, --help  show this help message and exit
    
    subcommands:
      valid subcommands
    
      {foo,bar}   additional help
        foo       foo subcommand
        bar       bar subcommand
    

    2つの自己命令が現れ、1つはfoo、1つはbarで、次に自分の助けの内容を見てみましょう.
    parser.parse_args('foo -h'.split())#  foo -h  ,            ,
    #                              。
    usage: subparser_test foo [-h] x y
    
    positional arguments:
      x           an integer
      y           another integer
    
    optional arguments:
      -h, --help  show this help message and exit
    

    foo-hを入力すると、fooサブコマンドのヘルプ内容だけが表示されます!
    set_の使用default()は、それぞれの機能のパラメータを管理します.
    もう一つ重要な問題は、ヘルプの内容がきれいになったが、各サブコマンドにはそれぞれ異なるパラメータがあり、入力するたびにこれらのパラメータがどのサブコマンドに属しているかを判断しなければならない.これは面倒だ.argparseは私たちにset_を提供してくれた.default()この方法は,各サブコマンドのパラメータを各サブコマンドのプログラム実行に渡す.次に、サブコマンドプログラムを次のように仮定します.
    def foo(args):
        print('x arg is {}'.format(args.x))
        print('y arg is {}'.format(args.y))
    def bar(args):
        print('a arg is {}'.format(args.a))
    

    これらのサブ関数にそれぞれのパラメータを追加したいので、次のように新しいコードを追加しました.
    import argparse
    parser = argparse.ArgumentParser(
                                     prog='subparser_test'
    )
    subparsers = parser.add_subparsers(title='subcommands',
                          description='valid subcommands',
                          help='additional help'
    )
    foo_function = subparsers.add_parser('foo',help='foo subcommand')
    foo_function.add_argument('x', type=int, help='an integer')
    foo_function.add_argument('y', type=int, help='another integer')
    foo_function.set_defaults(func=foo)
    
    bar_function = subparsers.add_parser('bar',help='bar subcommand')
    bar_function.add_argument('a', type=str, help='a help')
    bar_function.set_defaults(func=bar)
    
    args = parser.parse_args()
    args.func(args)
      
    

    今回は、次のコマンドを実行すると、パラメータがどのサブコマンドに渡されるかが自動的に認識されます!
    args = parser.parse_args('foo 1 2'.split())
    args.func(args)
    x arg is 1
    y arg is 2
    

    ついに大功を成し遂げた!