2012-11-27 6 views
5

現在、argparseを使用して引数を解析し、ブール値のオプションとしてフラグを格納しています。次に、どのフラグがtrueに設定されているかを確認し、その関数を実行します。 Argparseは入力ファイルを解析します。入力ファイルはオープンされ、呼び出された関数に引数として渡されます。だから、argparse他のオプションを解析した後に関数を呼び出す

parser.add_argument('input_data', action='store', help='some help') 
parser.add_argument('outputname', action='store',default=None, help='some help') 
parser.add_argument('--flag','-f', action='store_true', dest='flag', default=False, help='help!') 

私はフラグ関数が呼び出される前に、そこからいくつかの情報を読み取るためにINPUT_DATAを開く必要があります。それは、アクションキーワードは関数を呼び出す持ってsubclass argparseすることが可能である

if args.flag == True: 
    array_out = flag(array_read_from_input) 
    if args.outputname == None: 
     name = 'Flag.tif' 

:これは、現在のように実装されています。

input_dataオプションを解析して何らかの処理を実行し、argparseのアクションパラメータをサブクラス化することで、各引数にifループを入れ子にすることなくフラグ関数を呼び出すことはできますか?

+0

オブジェクトを「True」または「None」と比較しないでください。 'is'を使うか、オブジェクトの真理値を使用してください(' args.flag:... 'と' args.outputnameがNone'ならば)。また、カスタムアクションを正しく作成できることもわかりますか? argparseのドキュメントを読んでください。 – Bakuriu

+0

@Bakuriu "argparseをサブクラス化して、actionキーワードを関数に呼び出すことは可能です。"問題は、カスタムアクションを作成することが可能かどうかではなく、そのアクションを解析して他のargを操作した後に呼び出すことができるかどうかではありません。 – Jzl5325

+0

* after *構文解析を呼び出す場合は、あなたの質問に 'argparse'の関係が何か分かりません。そのモジュールは、コマンドラインを解析し、最終的に*解析中のアクション*を実行するだけです。また、私は二重 'if'の何が間違っているのか理解していません。 補足:[parser](http://docs.python.org/dev/library/argparse.html#argumentparser-objects)のサブクラスを使用し、 'parse_args'を再実装することはできませんそこに呼ばれますが、あなたはまだそこに二重 ''を置かなければなりません。 – Bakuriu

答えて

0

それは例えば、INPUT_DATAオプションを解析し、いくつかの 処理を実行し、各引数について ループ場合にネストせずにフラグ機能を呼び出すことが可能です。、argparseのアクション パラメータをサブクラス化?

質問に応じます。

class FooAction(argparse.Action): 
    def __call__(self, parser, namespace, values, option_string=None): 
     << some processing of values >> 
     array_out = flag(values) 
     setattr(namespace, self.dest, array_out) 

parser = argparse.ArgumentParser() 
parser.add_argument('input_data', action=FooAction, help='some help') 
関連する問題