argparseを使用して、さまざまなタイプの社内サーバーを管理するための単純なPythonプログラムがあります。
manage_servers.py <operation> <type_of_server>
操作とは、チェック、ビルド、デプロイ、構成、検証などです。
サーバーの種類は、私たちが使用する社内サーバーの種類とは異なります。
汎用サーバークラスがあり、それを継承する特定のタイプがあります。
class Server
def configure_logging(self, loggin_file):
...
def check(self):
...
def deploy(self):
...
def configure(self):
...
def __init__(self, hostname):
self.hostname = hostname
logging = self.configure_logging(LOG_FILENAME)
class SpamServer(Server):
def check(self):
...
class HamServer(Server):
def deploy(self):
...
私の質問は、それをすべてargparseにリンクする方法です。
もともと、私は操作(チェック、ビルド、デプロイ)にargparseサブ解析を使用し、型に別の引数を使用していました。
subparsers = parser.add_subparsers(help='The operation that you want to run on the server.')
parser_check = subparsers.add_parser('check', help='Check that the server has been setup correctly.')
parser_build = subparsers.add_parser('build', help='Download and build a copy of the execution stack.')
parser_build.add_argument('-r', '--revision', help='SVN revision to build from.')
...
parser.add_argument('type_of_server', action='store', choices=types_of_servers,
help='The type of server you wish to create.')
通常、各サブ解析をメソッドにリンクしてから、type_of_serverを引数として渡します。ただし、クラスが原因で少し逆になります。適切なServerクラスのインスタンスを作成してから、その内部で操作メソッドを呼び出す必要があります。
上記をどのように達成できるかについてのアイデアはありますか?おそらく、サーバーの異なるデザインパターンですか?または、argparseをそのまま使用する方法はありますか?
乾杯、ビクター