2012-01-21 7 views
2

私はいくつかの(3)整数引数を取るためにargparseを使い、これらをプログラム本体の変数として使用したいと思います。以下のコードを実行すると、各変数は1つの要素リストに格納されます。これはもちろん大きな問題ではありませんが、各値を単純な整数変数に入れるようにパーサーを設定することは可能ですか?は、単純な変数として位置番号引数をargparseできますか?

import argparse 

def main(): 
    parser = argparse.ArgumentParser(description='three positional integer arguments.') 
    parser.add_argument('picks', type=int, nargs='+', default=10, 
         help='number of selections per execution') 
    parser.add_argument('minchunk', type=int, nargs='+', default=2, 
         help='min chunk size') 
    parser.add_argument('maxchunk', type=int, nargs='+', default=8, 
         help='max chunk size') 

    args = parser.parse_args(['1', '2', '3']) 
    print args 
    return 0 
+0

が得られます。複数の値をサポートしたい場合は、常にリストを使用してください。 – delnan

答えて

2

nargs = '+'リスト内に1つの以上の引数を収集するために​​に指示します。 あなたがnargs = '+'削除する場合:

import argparse 

def main(): 
    parser = argparse.ArgumentParser(
     description = 'three positional integer arguments.') 
    parser.add_argument('picks', type = int, default = 10, nargs = '?', 
         help = 'number of selections per execution') 
    parser.add_argument('minchunk', type = int, default = 2, nargs = '?', 
         help = 'min chunk size') 
    parser.add_argument('maxchunk', type = int, default = 8, nargs = '?', 
         help = 'max chunk size') 

    args = parser.parse_args() 
    print args 

main() 

は、あなたがこれを行う場合、あなたは突然渡される数値の個数に応じて、完全に異なっ取得し、互換性のない型

Namespace(maxchunk=3, minchunk=2, picks=1) 
+0

ありがとう、それは正しい軌道に私を設定します。残念ながら、nargsのデフォルト値では、引数はオプションではありません。厳密に3が指定されないと、エラーが発生します( '引数が少なすぎるか、認識できない引数')。 nargs = '?'を使用する私のための正しいオプションのように思えます、それが存在する場合は単一の値を消費し、それ以外の場合はデフォルト値を使用します。 3つ以上の引数が指定された場合、必要に応じて「認識できないarg」エラーが発生します。 – thermalCat

+0

thermalCat、フィードバックありがとうございます。 'nargs = '?' 'を追加して、デフォルトが有効になるようにしました。 – unutbu

0

このようなものはありますか?

(a,b,c) = parser.parse_args(['1','2','3']) 
+0

そんな気がするならば、最初の括弧を省略することもできます。 – Thomas

関連する問題