2015-02-10 104 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