7

インフラストラクチャを管理するための一連のスクリプトとモジュールを構築しています。物事を整理しておくために、できるだけ多くの労力を統合し、新しいスクリプトのボイラー プレートを最小限に抑えたいと考えています。

特にここでの問題は、ArgumentParser モジュールを統合することです。

構造の例は、スクリプトとライブラリを次のように編成することです。

|-- bin
    |-- script1
    |-- script2
|-- lib
    |-- logger
    |-- lib1
    |-- lib2

このシナリオscript1では、 and のみを使用できますが、loggerandlib1script2使用loggerlib2ます。どちらの場合も、ロガーが「-v」と「-d」を受け入れるようにしたいのですが、script1追加の引数やlib2その他の引数も受け入れる場合があります。これが衝突につながる可能性があることは承知しており、手動で管理します。

スクリプト1

#!/usr/bin/env python
import logger
import lib1
argp = argparse.ArgumentParser("logger", parent=[logger.argp])

スクリプト2

#!/usr/bin/env python
import logger
import lib2

ロガー

#!/usr/bin/env python
import argparse
argp = argparse.ArgumentParser("logger")
argp.add_argument('-v', '--verbose', action="store_true", help="Verbose output")
argp.add_argument('-d', '--debug', action="store_true", help="Debug output. Assumes verbose output.")

各スクリプトと lib は独自の引数を持つ可能性がありますが、これらはすべて 1 つの最終的な arg_parse() に統合する必要があります。

これまでの私の試みでは、argp セットアップの継承/拡張に失敗しました。ライブラリファイルとスクリプトの間でこれを行うにはどうすればよいですか?

4

1 に答える 1

11

最も簡単な方法は、各モジュールに、ArgumentParserインスタンスを受け入れて独自の引数を追加するメソッドを用意することです。

# logger.py
def add_arguments(parser):
    parser.add_argument('-v', '--verbose', action="store_true", help="Verbose output")
    # ...

# lib1.py
def add_arguments(parser):
    parser.add_argument('-x', '--xtreme', action="store_true", help="Extremify")
    # ...

各スクリプトは を作成しArgumentParser、それを引数を提供する各モジュールに渡し、独自の特定の引数を追加します。

# script1.py
import argparse, logger, lib1
parser = argparse.ArgumentParser("script1")
logger.add_arguments(parser)
lib1.add_arguments(parser)
# add own args...
于 2013-03-19T08:43:17.633 に答える