1

私は、同じサーバーに接続し、関連しているが異なることを行う一連のコマンドラインツールに取り組んでいます。ユーザーが、すべてのツールで共有できる接続情報などの共通の引数を配置できる単一の構成ファイルを持つことができるようにしたいと考えています。理想的には、私のために次のことを行うものが欲しいです:

  1. コマンドラインでサーバーアドレスが指定されている場合は、これを使用し、他の値を無視します
  2. サーバー アドレスがコマンド ラインで指定されていないが、コマンド ラインで指定された構成ファイルにある場合は、このアドレスを使用します。その他の値は無視してください。
  3. サーバーアドレスがコマンドラインまたはコマンドで指定された構成ファイルで指定されていないが、ユーザーのホームディレクトリの構成ファイル (たとえば.myapprc ) で使用できる場合は、この値を使用します。
  4. サーバーアドレスが上記のメカニズムのいずれにも指定されていない場合、エラーメッセージが表示されて終了します。

これに最も近いのはconfigparseモジュールです。これは、構成ファイルも見るオプションパーサーを提供することがわかりますが、必要な「どこかに指定する必要がある」という概念を持っていないようです。

上記の私のユースケースをカバーできる既存のモジュールを知っている人はいますか? そうでない場合は、optparse、configparse、または私がレビューしていない他のモジュールへの単純な拡張も大歓迎です。

4

3 に答える 3

1

このパーティ モジュールのconfigparseは、標準の Python ライブラリからoptparseを拡張するために作成されています。私が指摘した optparse のドキュメントのように、「optparse は必要なオプションの実装を妨げませんが、それに関してもあまり役に立ちません」(ただし、その方法を示すいくつかの URL が続きます)。 . 最も簡単な方法は、デフォルト値の機能を使用することです: 実際には正当な値ではないデフォルト値を指定します (サーバーのアドレスなどの場合、これは非常に簡単です)。そして、オプションが処理されたら、指定された値が正当であることを確認します (つまり、とにかく良い考えです!-) そうでない場合は、適切な例外を発生させます。

于 2009-11-28T04:42:04.650 に答える
0

dict を使用して、オプションをプログラムに保存します。

まず、ユーザーのディレクトリにあるオプション ファイルを解析し、すべてのオプションを dict に保存します (configparse またはその他のモジュールを使用できます)。次に、コマンドラインを解析します (必要なモジュールを使用すると、optparse がうまく適合する可能性があります)。引数が構成ファイルを指定している場合は、dict で指定されたファイルを解析し、読み取ったものからオプションを更新します ( dict.update2 つの dict をマージするのに非常に便利です)。 . 次に、他のすべての引数を別のdictに保存し、それらを再度マージします(dict.updateもう一度...)。

このようにして、オプションを保存した dict に必要な値が含まれていることを確認できます。これは、ユーザーのファイル、指定された構成ファイル、またはコマンドラインから直接読み取られたものです。必要な値が含まれていない場合は、エラーで終了します。

于 2009-11-28T09:23:09.207 に答える
0

私はopsterのミドルウェア機能をSafeConfigParserと一緒に使用して、同様の (しかし少し単純な) 効果を実現しました。自分で説明した特定のロジックを実装する必要がありますが、それは比較的簡単にするのに十分に役立ちます. opster のミドルウェアの使用例は、そのtest/test.pyの例にあります。

于 2009-11-28T05:27:03.327 に答える