Python-コマンドラインパラメータを解析する2つの方法
5949 ワード
1つ目:getopt
2つ目:argparse
python公式ドキュメント argparseユーザーがコマンドラインパラメータを構築するのに便利なインタフェースで、sysの解析方法を知っている.Argvパラメータは、helpヘルプドキュメント、使用説明、エラープロンプトなど を自動的に生成することもできる.簡単な手順を使用: パラメータの追加-コマンドラインから整数リスト を取得します.解析パラメータ
ソースコード
知識の拡張:fireライブラリの使い方コマンドラインでpython作成やメソッドなどの をコマンドで呼び出す.実行コマンド:python 3 fire_study.py double 10 出力:20
# - 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
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ライブラリの使い方
import fire
class Calculator(object):
"""A simple calculator class."""
def double(self, number):
return 2 * number
if __name__ == '__main__':
fire.Fire(Calculator)