我正在编写一个Django应用程序,我期望使用许多management.py命令.我喜欢python函数具有默认值参数的想法,您可以将param定义为:
def function(param1=value1)
Run Code Online (Sandbox Code Playgroud)
所以我正在写我的管理命令,你输入如下:
python manage.py createdb user=some_user db_name=some_name
Run Code Online (Sandbox Code Playgroud)
据我所知,management.py命令不接受这种类型的参数列表,所以我创建了一个帮助程序来执行以下操作:
def process_args(args=None):
kwargs = {}
if not args:
return kwargs
for i in args:
try:
k,v = i.split('=')
kwargs[k] = v
except ValueError, ve:
raise CommandError("Please Enter All Arguments as key=value. e.g. user=admin")
return kwargs
Run Code Online (Sandbox Code Playgroud)
有一个更好的方法吗?
nra*_*itz 12
更新: 根据@rix,Django的更高版本现在使用argparse,这应该是首选.
原答案:
我相信这里的标准方法是使用optparse,它可以挂钩解析Django已经使用的现有选项.1.6文档中的示例:
from optparse import make_option
class Command(BaseCommand):
option_list = BaseCommand.option_list + (
make_option('--delete',
action='store_true',
dest='delete',
default=False,
help='Delete poll instead of closing it'),
)
# ...
Run Code Online (Sandbox Code Playgroud)
现在,您可以在options字典中使用命令行参数.Python文档说optparse不赞成,但我认为Django文档推荐它,因为它是Django用于自己的管理命令的东西.
您可以使用典型的参数样式,而不是滚动自己的参数样式,并使用类似的方法argparse来解析它:
python manage.py createdb --user=some_user --db_name=some_name
Run Code Online (Sandbox Code Playgroud)
您只需定义参数解析器,然后将args参数传递给其parse_args()方法.
| 归档时间: |
|
| 查看次数: |
4220 次 |
| 最近记录: |