パーサーを生成し、サブパーザーと引数については、ArgParseビルダを実装する必要があります。サブパーザをアクションとして宣言するデコレータを作成しました。ここではデコレータが含まれているクラスは、次のとおりです。Subparsers.add_parser TypeError:__init __()に予期しないキーワード引数 'prog'があります
class Controller(object):
endpoints = None
parser = None
subparsers = None
def __init__(self, endpoint=None):
from src.app.commons.ArgParser import ArgParser
if not self.parser:
self.parser = ArgParser()
# Get all
self.endpoints = utilities.conf_wrapper()
self.mod = endpoint
if not self.subparsers:
self.subparsers = self.parser.add_subparsers(help=gettext('%s_SUBPARSER_HELP' % str(self.mod).upper()))
self.parser.add_argument_group(self.mod, gettext('%s_GROUP_DESC' % str(self.mod).upper()))
def endpoint(self, endpoint, **kwargs):
""" Create an endpoint to define a method on behalf of subparser"""
ref = self
def decorator(f):
"""
Create subparser for controller object
@param f as a function to call
@return decorator method
"""
# TODO Set given function f as a subparser destination
new_sub_parser = ref.subparsers.add_parser(endpoint, help=gettext('%s_%s_HELP' % (ref.mod, endpoint)))
[new_sub_parser.add_argument("--%s" % arg, action='store') for arg in ref.endpoints[ref.mod][endpoint]["params"]]
setattr(ConsoleInterface, 'do_%s' % endpoint, f)
return decorator
そして、ここでは、私は、クラス内で呼び出す方法です:
:私はここに期待しています何from src.app.controller import Controller
network = Controller("network")
@network.endpoint('create')
def create(*args):
try:
print "I am here"
except Exception as err:
print err
は、このようなコマンドとしていくつかのパーサを作成することです
$~ network create [arguments]
はArgParse docsによると、私はすべてが右にやるが、私は次のように例外が発生しました:
File "/projectpath/src/app/controller/__init__.py", line 48, in decorator
new_sub_parser = ref.subparsers.add_parser(endpoint, help=gettext('%s_%s_HELP' % (ref.mod, endpoint)))
File "/usr/lib/python2.7/argparse.py", line 1066, in add_parser
parser = self._parser_class(**kwargs)
TypeError: __init__() got an unexpected keyword argument 'prog'
ArgParse._SubParsersAction.__init()__
を見ると、kwargs内の 'prog'をカバーしています。
これは役立つかもしれません:https://bugs.python.org/issue23487これも:https://stackoverflow.com/questions/33574270/typeerror-init-got-an-unexpected-keyword-argument-type-in -argparse – BoboDarph