2015-02-10 6 views
6

Ich versuche, einen Django-Management-Befehl mit Argparse, aber immer wenn ich es ausführen, gibt es immer keine solche Option, die gültig ist, da diese Nachricht stammt aus dem manage.py:Django Management-Befehl und argparse

class Command(BaseCommand): 
    def handle(self, *args, **options): 
     parser = argparse.ArgumentParser('Parsing arguments') 
     parser.add_argument('--max', type=float, store) 
     args = parser.parse_args(sys.argv[2:]) 

Was wäre der richtige Weg, um einige Argumente Parser mit Management-Befehle zu verwenden?

Python-Version 2.x.

+1

Es ist erwähnenswert, dass Django jetzt argparse statt optparse als Django 1.8 https verwendet://docs.djangoproject.com/de/1.8/howto/custom-management-commands/ – mrpopo

Antwort

5

In Django werden Optionen mit OptParser geparst, bevor sie an Ihre Command übergeben werden. Sie sollten Ihre Optionen BaseCommand.option_list wie folgt hinzu:

class Command(BaseCommand): 
    help = 'My cool command' 
    option_list = BaseCommand.option_list + (
     make_option('--max', 
        action='store', 
        dest='max', 
        type='float', 
        default=0.0, 
        help='Max value'),) 

    def handle(self, *args, **options): 
     print options['max'] 
+0

Danke, es ist in Ordnung, aber ein Komma fehlt. Für die spätere Verwendung, können Sie es bitte hinzufügen? – user2194805

+0

Danke, fügte es hinzu. – Yossi

4

Stattdessen ändern nur die option_list, as suggested in docs:

from optparse import make_option 

class Command(BaseCommand): 
    option_list = BaseCommand.option_list + (
     make_option('--max', 
      action='store', 
      type='float', 
      dest='max'), 
     ) 

    def handle(self, *args, **options): 
     print options['max'] 
+0

Ich denke, ein Komma und eine Klammer fehlt in Ihrem Code .... Trotzdem danke! – user2194805

+0

@ user2194805 danke, behoben. – alecxe