Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/283.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django管理命令参数从另一个程序的执行中获取_Python_Django_Django Management Command - Fatal编程技术网

Python Django管理命令参数从另一个程序的执行中获取

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 我希望命

我需要运行一个名为populate_db.py的自定义Django管理命令模块,该模块包含在Management/commands目录中。它填充数据库

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的当前代码,可能会有所帮助。