如果fromDict.py
打印到终端 (STDOUT),您可以在管理命令中使用管道( |
) 从STDIN获取参数,您可以使用sys.stdin
它。由于您可能希望自己执行命令,因此最好也通过参数接受字符串。
您的管理命令将如下所示:
# populate_db.py
import argparse
import ast
import sys
from django.core.management.base import BaseCommand, CommandError
class Command(BaseCommand):
help = 'Polulate the Database'
def add_arguments(self, parser):
parser.add_argument(
'input_dict',
nargs='?',
type=str,
default=None
)
def handle(self, *args, **options):
if options['input_dict']:
input_dict = options['input_dict']
else:
input_dict = sys.stdin.read()
try:
data = ast.literal_eval(input_dict)
except SyntaxError:
raise CommandError(f'Invalid dict input: {input_dict}')
# populate the DB with data
您可以使用以下任一方法执行该命令:
从 STDIN 获取字典
python fromDict.py | python yourproject/manage.py populate_db
或者
通过参数传递字典
python yourproject/manage.py populate_db '{'some': 'dict'}'
注意:如果dict来自不受信任的来源,请注意literal_eval,因为有人可以利用它(例如具有非常大的值)来破坏python解释器。