argv
コマンドラインに与えられた引数を解析するためのパラメータとして使用するpythonクラスを使用しています。このクラスが使用しているパーサーの種類はわかりません。とにかく、このクラスを変更することはできません。
ここで、上記のクラスから派生した新しいクラスを作成し、追加の引数をargparse
. argparse
元のクラスの機能をそのまま維持し、「結合された」ヘルプ出力を使用して、最もシンプルで信頼性が高く、pythonic な方法でこれを達成するにはどうすればよいですか?
argv
コマンドラインに与えられた引数を解析するためのパラメータとして使用するpythonクラスを使用しています。このクラスが使用しているパーサーの種類はわかりません。とにかく、このクラスを変更することはできません。
ここで、上記のクラスから派生した新しいクラスを作成し、追加の引数をargparse
. argparse
元のクラスの機能をそのまま維持し、「結合された」ヘルプ出力を使用して、最もシンプルで信頼性が高く、pythonic な方法でこれを達成するにはどうすればよいですか?
メソッドは、追加の引数を選択するのparse_known_args
に役立ちます。sys.argv
その後、残りの引数文字列の 2 番目の出力に置き換えて、制御を渡すことができます。
使用しているパーサーやパーサーへのアクセスがわからない場合、ヘルプ出力を組み合わせることは難しくなります。私が考えることができる最良のオプションは、プログラムを--help
or で一度実行し、出力を文字列として保存し、それをdescription
orに追加することepilog
です。コードがどのように機能するかに応じて、次の行に沿ってこのプロセスを自動化できます
import argparse
import sys
from StringIO import StringIO
old_stderr = sys.stderr
sys.stderr = cap = StringIO()
old_argv = sys.argv
sys.argv = ['--help']
TheClass().parse_args()
sys.stderr = old_stderr
sys.argv = old_argv
parser = argparse.ArgumentParser(description=cap.read())
parser.add_argument('--foo', type=float)
my_args, remainder = parser.parse_known_args()
sys.argv = remainder
TheClass(foo=my_args.foo).parse_args()
(テストされていないコード、購入者は注意してください。)
これにより、2 つの最初の使用方法の行が表示される可能性がかなり高くなります。最初の行には引数がリストされ、2 番目の行には内部クラスの引数がリストされます。argparse
の行を引数でカスタマイズできますがusage
、それでも少し奇妙に見えるでしょう。文字列を手動で編集せずにそれを回避する方法がわかりません。