2013-06-15 16 views
13

私はparsePlotSens.py -s bw heheを実行し、それがheheが認識できない引数であることを述べています。しかし、私がparsePlotSens.py hehe -s bwを実行しても問題ありません。理想的には、どちらの場合でもうまくいきたいです。のpython argparse:認識できない引数

ヒント?以下は、私のコードです:unutbuの答えを補完するものとしても

if __name__ == '__main__' : 

    parser = argparse.ArgumentParser(prog='parsePlotSens'); 
    parser.add_argument('-s', '--sort', nargs =1, action = 'store', choices = ['mcs', 'bw'], default='mcs', help=sorthelp) 
    parser.add_argument('filename', nargs ='+', action = 'store') 
    option = parser.parse_args(sys.argv) 

答えて

28

parse_argsに引数としてsys.argvを渡さないでください。ちょうどあなたがparse_argssys.argvを渡す行う場合、スクリプト自体のパスや名前がsys.argvの最初の項目であり、従って、option.filenameの値になり

option = parser.parse_args() 

を使用しています。 heheは、未知の引数になります。

sys.argvを省略すると、parse_argsは、期待通りにsys.argvを解析します。

+6

args = parser.parse_args() 

を交換できるように、未知の引数でこれを回避することができます(sys.argvの[1:])。内部的にargparseはそれだけです。 – MarioVilas

4

、この方法は、テストが容易になり、辞書内の引数を格納:

args = vars(parser.parse_args()) 
print args 

辞書を印刷します:

{'sort': ['bw'], 'filename': ['hehe']} 

同様:

if args['sort'] == 'bw': 
    # code here 

... 
0

あなたは

はまた、あなたがparser.parse_argsを呼び出すことができます

args, unknown = parser.parse_known_args() 
関連する問題