Python-コマンドラインパラメータを解析する2つの方法

5949 ワード

1つ目:getopt
#             - getopt

# opts         ,         。     :(   ,    )。            ''。
# args                 。
# eg:python parameter.py -l 1 -c 2 --list 3 5 6
# opts=[(-l,1),(-c,2),(--list 3)]  args=[5,6]

# getopt         ,getopt    sys.argv      ,  '-'         
#   ,   '-'   cmd(  ),           value,'--'  ,   cmd,value 
#       ,  opts   ,  '-','--'          ,    args   ,  getopt          。
if 0:

    try:
        #             parameter.py
        print(sys.argv[0])
        #    
        opts,args = getopt.getopt(sys.argv[1:],'l:t:',["list=","target="])
        print(opts)
        print(args)
    except getopt.GetoptError:
        pass

2つ目:argparse
python公式ドキュメント
  • argparseユーザーがコマンドラインパラメータを構築するのに便利なインタフェースで、sysの解析方法を知っている.Argvパラメータは、helpヘルプドキュメント、使用説明、エラープロンプトなど
  • を自動的に生成することもできる.
  • 簡単な手順を使用:
  • #   argparse     
    parser = argparse.ArgumentParser(
        prog='my parameter',
        usage='-- test usage',
        description = textwrap.dedent('''\
                Please do not mess up this text!
             --------------------------------
                I have indented it
                 exactly the way
                 I want it
             '''),
        epilog='''likewise for this epilog whose whitespace will
                be cleaned up and whose words will be wrapped
                across a couple lines''',
        # '-+',    '-','--','+','++'      
        prefix_chars='-+', 
        #   ,              ,                            。
        #    fromfile_prefix_chars =    ArgumentParser    ,                   ,            。:
        fromfile_prefix_chars='@',
        formatter_class=argparse.RawDescriptionHelpFormatter,
        argument_default=argparse.SUPPRESS,
        #        
        allow_abbrev=True,
        #    help  
        add_help= True
    )
    #     
    
        #  prog -       (default: sys.argv[0], parameter.py,        )
        #  usage -      (default: generated from arguments added to parser)
        #  description -                (default: none)
        #  epilog -                (default: none)
        #  parents - A ArgumentParser       ,   arguments        ArgumentParser   。(     )
        #  formatter_class - help       
        #  prefix_chars -     , (default: ‘-‘),  prefix_chars       ,eg:'-+',    '-','--','+','++'      
        #  fromfile_prefix_chars - The set of characters that prefix files from which additional arguments should be read (default: None)
        #  argument_default - The global default value for arguments (default: None)
        #  conflict_handler - The strategy for resolving conflicting optionals (usually unnecessary)
        #  add_help -   '-h','--help'     (default: True)
        #  allow_abbrev - Allows long options to be abbreviated if the abbreviation is unambiguous. (default: True)
    
  • パラメータの追加-コマンドラインから整数リスト
  • を取得します.
    parser.add_argument('-l','--list',dest='list',metavar='N',nargs='+',help='get int list')
    # parser.add_argument('list',metavar='N',nargs='+',help='get int list') (  '-'  )
    
    # add_argument        :*args, **kwargs,*               ,**             
    # *args = ('-l','--list') **kwargs = {'dest':'list','metavar':'N','nargs':'+','help':'get int list'}
    
    #     
        # name or flags -            ,       , e.g. foo or -f, --foo.(parser.add_argument('-f', '--foo'))
        # action -                   (     store。)
    
            # store_const,     const;
            # append,          ,                ;
            # append_const,                   ;
            # count,       ;  ,      argparse.Action        ;
    
        # nargs -               
            #        
            # OPTIONAL = '?'
            # ZERO_OR_MORE = '*' 
            # ONE_OR_MORE = '+'         
            # PARSER = 'A...'
            # REMAINDER = '...'
            # _UNRECOGNIZED_ARGS_ATTR = '_unrecognized_args'
        # const -       
        # default -           。
        # type -               。
        # choices -             。
        # required -            (       )。
        # help -     
        # metavar -             
        # dest -    key,          .
    
  • 解析パラメータ
  • # -----fromfile_prefix_chars
    # with open('args.txt', 'w') as fp:
    #     fp.write('-f
    bar') # parser = argparse.ArgumentParser(fromfile_prefix_chars='@') # parser.add_argument('-f') # parser.parse_args(['-f', 'foo','@args.txt']) # argf = parser.parse_args() # print(argf) # -----parents # parent_parser = argparse.ArgumentParser(add_help=False) # parent_parser.add_argument('--parent', type=int) # foo_parser = argparse.ArgumentParser(parents=[parent_parser]) # foo_parser.add_argument('foo') # foo_parser.parse_args(['--parent', '2', 'XXX']) args = parser.parse_args() print(args) print(args.list) # :python3 parameter.py -l 1 2 3 4 # : # Namespace(list=['1', '2', '3', '4']) # ['1', '2', '3', '4'] # :python3 parameter.py -h # : # usage: parameter.py [-h] [-l N [N ...]] # two num add # optional arguments: # -h, --help show this help message and exit # -l N [N ...] get int list

    ソースコード
    知識の拡張:fireライブラリの使い方
  • コマンドラインでpython作成やメソッドなどの
  • をコマンドで呼び出す.
     import fire
    class Calculator(object):
      """A simple calculator class."""
    
      def double(self, number):
        return 2 * number
    
    if __name__ == '__main__':
      fire.Fire(Calculator)
    
  • 実行コマンド:python 3 fire_study.py double 10
  • 出力:20