引数と位置引数を付けてpython-argparseを使いたいです。私はコマンドライン上で私のスクリプトを持っていると言う(だけのシンプルな&愚かな例である)、これはこれまでのところ私のコードです:Argparse:パーサとサブパーザの引数を区別する方法
#!/usr/bin/env python
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('--verbose', action='store_true')
subparsers = parser.add_subparsers(help='command', dest='command')
cmd1_parser = subparsers.add_parser('command1')
cmd1_parser.add_argument('--verbose', action='store_true')
args = parser.parse_args()
print args
今、私はこのように、このスクリプトを呼び出す:
~ $ myscript --verbose command1 --verbose
Namespace(command='command1', verbose=True)
~ $ myscript command1 --verbose
Namespace(command='command1', verbose=True)
~ $ myscript --verbose command1
Namespace(command='command1', verbose=True)
今のように同じ名前空間オブジェクトを常に得ることができ、verboseコマンドが通常のパラメータであるかサブパラメータパラメータであるかを区別することはできません。 しかし、これらのパラメータを個別に処理する必要があります。 これを行うには簡単な方法(最小限のコード努力)が必要ですか?
EDIT:
私は、Python STDLIB課題追跡内の問題を提起した:これはあなたの最初になります
cmd1_parser.add_argument('--verbose', action='store_true', dest='cmd1_verbose')
: http://bugs.python.org/issue15327
サブクエリ:argparseの問題はどこに記録しますか? – ifischer
標準ライブラリにありますので、バグはhttp://bugs.python.org/にあります。ただし、機能リクエストの場合は、python-listまたはpython-ideasを使用する必要があります。 http://docs.python.org/devguide/communication.htmlを参照してください。 –
これは大きな問題だと思います。サブパーザーはネームスペース内のネームスペースを(必要に応じて)返す必要がありますが、明らかにそのようには機能しません。さらに、 'add_subparsers'のdestキーワードが実際に何かをしているのはちょっと驚きです。 (どこにも書かれていないようです) – mgilson