2017-04-10 27 views
2

コマンドラインから複数の引数をカスタムdjango管理コマンドに渡すにはどうすればよいですか?カスタム管理コマンドに複数の引数を指定する

def add_arguments(self, parser): 
    parser.add_argument('str_arg1', nargs='+') 
    parser.add_argument('int_arg2', nargs='+', type=int) 

私が実行します。

./manage.py my_command str_arg1 value int_arg2 1 --settings=config.settings.local 

を私はoptionsに次の値を取得する:

options['str_arg1'] = ['str_arg1', 'value', 'int_arg2'] 
options['int_arg2'] = [1] 

は、マニュアルで検索しようとしたオンラインで引数を渡すの溶液と、複数の方法のために運がない。 Djangoのバージョンは1.10です。

おかげ

答えて

2

あなたは引数が定義されている方法は、彼らが位置引数であることを意味します。不明な量の値を消費する複数の定位置引数を持つ賢明な方法はありません。

代わりに、オプションとして、それらを指定するために、あなたのパーサーを変更します。

parser.add_argument('--str_arg1', nargs='+') 
parser.add_argument('--int_arg2', nargs='+', type=int) 

、コールを変更:トリックをした

./manage.py my_command --str_arg1 value --int_arg2 1 
+1

どうもありがとう、。とても簡単。なぜそれがリストに値を入れるのだろうか? 'options ['str_arg1'] [0]' – Ovidiu

+1

を使用して検索しています。 'nargs = '+''を使うと、argparseは常に値をリストに格納します。 '+'は "この引数に1つ以上の値があるかもしれない"ことを意味します。ちょうど1つの値を消費したいと思っているなら、 'nargs = '+''を省略することができます。 – wim

関連する問題