如何从Django项目外的脚本运行Django Shell命令

时间:2018-12-15 14:42:43

标签: python django command-line

我有一个网络刮板。它输出JSON数据。我有一个使用此JSON数据的Django项目。这些位于两个单独的存储库/目录中。

我的抓取工具将数据文件复制到我的Django项目中。我想要的是让该抓取脚本随后运行我的自定义命令,该命令通常会在命令行中使用以下命令激活:

python manage.py load_concerts name_of_file.json

我如何使我的scraper脚本(同样在Django项目之外)运行命令?

(搜索这些搜索字词让我问了一个相反的问题,问如何从命令行运行python脚本。我想从python脚本运行命令提示符。)

3 个答案:

答案 0 :(得分:1)

怎么办

project_path = r'<path to where manage.py is>'
project_name = '<project name>'

import os
os.chdir(project_path)
os.environ.setdefault("DJANGO_SETTINGS_MODULE", f"{project_name}.settings") #python3.6's best string formatting practice

from collections import OrderedDict
from django.apps import apps
from django.conf import settings
from django.core import management

apps.app_configs = OrderedDict()
apps.ready       = False
apps.populate(settings.INSTALLED_APPS)
management.call_command('load_concerts name_of_file.json')


使用此answer

答案 1 :(得分:1)

您还可以通过使脚本将GET请求发送到特定URL来非常简单地实现此目的,并且可以将Django中的URL映射到特定视图。 现在,您可以在该视图功能中执行任何操作。

对于UNIX系统,您可以简单地使用CURL,而且我敢肯定,在Windows中也是如此,您必须进行一些搜索。

答案 2 :(得分:0)

我需要激活虚拟环境才能运行Shell命令。这是对我有用的脚本:

cd /home/[my name]/Devel/[project dir]
source /home/[my name]/.virtualenvs/[project dir]/bin/activate
python manage.py shell --command="from [somewhere] import [something]; [something]()"

/ home / [我的名字] /。virtualenvs / [项目目录] / bin / activate也无法执行,为了使脚本正常工作,我必须使其变为可执行文件:

chmod 755 /home/[my name]/.virtualenvs/[project dir]/bin/activate