2017-04-10 8 views
2

Wie übergebe ich mehrere Argumente mit Werten von der Befehlszeile an einen benutzerdefinierten django-Verwaltungsbefehl?Mehrere Argumente mit Werten für benutzerdefinierten Verwaltungsbefehl

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

Wenn ich laufe:

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

ich die folgenden Werte in options erhalten:

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

in Dokumentation versucht die Suche und online für eine Lösung und mehr Möglichkeiten, die Argumente mit geben kein Glück. Djangos Version ist 1.10.

Dank

Antwort

2

Die Art und Weise Sie die Argumente definiert haben, bedeutet, sie Positions Argumente sind. Es gibt keinen vernünftigen Weg, mehrere Positionsargumente zu haben, die eine unbekannte Menge an Werten verbrauchen.

Ändern Sie bitte Ihre Parser sie als Optionen angeben statt:

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

und ändern Sie den Aufruf:

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

Vielen Dank, dass der Trick. So einfach. Irgendeine Idee, warum es die Werte in Listen setzen würde? Ich erhalte sie jetzt mit 'options ['str_arg1'] [0]' – Ovidiu

+1

Wenn Sie 'nargs = '+'' verwenden, speichert argparse die Werte immer in der Liste. '+' bedeutet "es kann einen oder mehrere Werte für dieses Argument geben". Wenn Sie wissen, dass Sie nur genau einen Wert konsumieren wollen, können Sie das "nargs = '+" weglassen. – wim

Verwandte Themen