最近の読者への PSA
この質問は 2018 年にもまだ訪問されているため、argparse でこの複雑なことを行う前に、代わりにdocoptまたはclickの使用を検討してください。これにより、あなたの正気と、あなたのコードを読んだり変更したりする可能性のある人の正気が向上します。ありがとうございました。
元の答え
現状では、いくつかの問題があります。
まず、parser.parse_args
は の引数の名前空間を返すメソッドparser
なので、次のようにする必要があります。
args = parser.parse_args()
次に、次のような呼び出しargs.main_args
から取得します-main_arg
program -main_arg run required_sub_arg -arg_a
あなたの問題は、 namedmain_arg
への引数を作成し、次のような呼び出しを行うことですparser
main_arg
program run required_sub_arg -main_arg -arg_a
a
これはnamedへの引数を参照しますmain_arg
。a
にはそのような引数がないため、無効です。
サブパーサーの 1 つからパーサーの引数を参照するには、そのサブパーサーにその親の引数を継承させる必要があります。これは
a=parser.add_subparser('run', parents=[parser])
サブパーサーを子パーサーと間違えました。詳細については、 http://docs.python.org/dev/py3k/library/argparse.htmlおよびhttps://code.google.com/p/argparse/issues/detail?id=54を参照してください。