Python Django管理命令参数从另一个程序的执行中获取
我需要运行一个名为populate_db.py的自定义Django管理命令模块,该模块包含在Management/commands目录中。它填充数据库Python Django管理命令参数从另一个程序的执行中获取,python,django,django-management-command,Python,Django,Django Management Command,我需要运行一个名为populate_db.py的自定义Django管理命令模块,该模块包含在Management/commands目录中。它填充数据库 restaurant/ __init__.py models.py management/ commands/ _private.py populate_db.py tests.py views.py formDict.py 我希望命
restaurant/
__init__.py
models.py
management/
commands/
_private.py
populate_db.py
tests.py
views.py
formDict.py
我希望命令将强制参数作为字典。上述字典可以从另一个名为formDict.py的程序的执行中获得
因此,我需要一个单行命令,该命令将运行formDict.py,并连续地将其结果作为自定义Django管理命令python manage.py populate_db的参数
有可能形成这样一个命令吗?如果没有,如何交替实现该想法?将formDict的逻辑封装到函数中。在populate_db.py的handle函数中调用它,以访问从form_dict返回的结果 或 将formDict.py移动到management/commands/并在formDict内使用call_命令调用populate_db。 .如果从dict.py打印到终端STDOUT,您可以在管理命令中使用|来获取参数,您可以使用sys.stdin。由于您可能希望自己执行命令,所以最好也接受参数字符串 您的管理命令看起来像一行: 填充_db.py 导入argparse 导入ast 导入系统 从django.core.management.base导入BaseCommand,CommandError 类CommandBaseCommand: help='Polulate the Database' def add_arguments self,解析器: parser.add_参数 “输入命令”, nargs='?', 类型=str, 默认值=无 def handleself,*参数,**选项: 如果选项['input_dict']: input_dict=选项['input_dict'] 其他: input_dict=sys.stdin.read 尝试: 数据=ast.literal\u evalinput\u dict 除SyntaxError外: raise CommandErrorf'无效的dict输入:{input_dict}' 用数据填充数据库 您可以通过以下任一方式执行该命令: 从STDIN那里得到dict python fromDict.py | python yourproject/manage.py populate_db 或 通过参数传递dict python yourproject/manage.py填充_db'{'some':'dict'}'
注意:如果dict来自不受信任的源,请小心,因为有人可能会利用它使用非常大的值,例如破坏python解释器 你可以运行django后台任务,看看我在这里的答案:如果你觉得它有用,那么不要忘记对它进行升级投票,以便社区可以利用它我已经用Python3.7编写了代码。如果您使用的是python<3.6,则需要将替换为.format。@如果发现您发布的错误,则表明您的属性是必需的。您是否像我的答案中的代码那样将nargs='?'添加到parser.add_参数?您是否正在处理缺少参数的问题并从stdin获取它?如果您可以发布populate_db.py的当前代码,可能会有所帮助。