2015-02-10 107 views
6

我試圖用argparse創建一個Django管理命令,但是每當我運行它時,它總是返回沒有這樣的選項這是有效的,因爲這個消息來自manage.py:Django管理命令和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:]) 

在管理命令中使用某些參數解析器的正確方法是什麼?

Python版本2.x。

+1

值得一提的是,Django的現在使用optparse的argparse而不是作爲Django的1.8 HTTPS:/ /docs.djangoproject.com/en/1.8/howto/custom-management-commands/ – mrpopo 2015-09-14 15:15:21

回答

5

在Django中,選項在被傳遞到Command之前被解析爲OptParser。您應該添加您的選項BaseCommand.option_list這樣的:

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

謝謝,沒關係,但逗號不見了。爲了以後的使用,你可以添加它嗎? – user2194805 2015-02-10 07:57:34

+0

謝謝,添加它。 – Yossi 2015-02-10 08:04:02

4

相反,只需修改option_listas 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

我認爲你的代碼中缺少一個逗號和一個括號......。不管怎樣,謝謝! – user2194805 2015-02-10 07:56:41

+0

@ user2194805謝謝,修復。 – alecxe 2015-02-10 08:01:01