13

私は機能を持っています:

def x(a,b,c)

このパターンに適合する変数値をコマンド ラインから収集するにはどうすればよいですか?

python test.py --x_center a --y_center b c(cたとえば、3 つ、4 つ、またはそれ以上の値を持つ)

4

1 に答える 1

41

次のようなことができます。

import argparse

def x(x_center, y_center, values):
    print "X center:", x_center
    print "Y center:", y_center
    print "Values:", values

def main():
    parser = argparse.ArgumentParser(description="Do something.")
    parser.add_argument('-x', '--x-center', type=float, required=True)
    parser.add_argument('-y', '--y-center', type=float, required=True)
    parser.add_argument('values', type=float, nargs='*')
    args = parser.parse_args()

    x(args.x_center, args.y_center, args.values)

if __name__ == '__main__':
    main()

やってみて:

$ python test.py --x-center 1 --y-center 2 3 4 5
X center: 1.0
Y center: 2.0
Values: [3.0, 4.0, 5.0]

モジュールを使用するargparseは、通常、main関数 (およびそれを呼び出すボイラープレート) から始めます。main関数ではArgumentParser . その後、いくつかの引数を追加する必要があります。

引数を追加するには、 を使用しますadd_argument

parser.add_argument('-x', '--x-center', type=float, required=True)

ここで-xは、長いオプション バリアントを持つオプション を追加しています--x-center。にtype渡すadd_argumentは、それが である必要があることを伝えますfloat(有効な float でない場合はエラーになります)。argparseまた、必須であることも伝えます。指定されていない場合は、エラーになります。

parser.add_argument('values', type=float, nargs='*')

これは前と同じですが、渡す文字列がダッシュで始まらないため、オプションではなく、オプションではない引数であると見なされます。繰り返しますが、floats が欲しいと伝えます。nargs複数の引数を取るように指定できます。*任意の数の引数が必要であることを指定します。

最後に、コマンド ラインをparse_args. これは、保存するオブジェクトを返します。

argsその後、そのオブジェクトのオプションと引数にアクセスし、プログラムで関連することを行うことができます。

于 2011-12-02T04:25:57.443 に答える