我有一个网络刮板。它输出JSON数据。我有一个使用此JSON数据的Django项目。这些位于两个单独的存储库/目录中。
我的抓取工具将数据文件复制到我的Django项目中。我想要的是让该抓取脚本随后运行我的自定义命令,该命令通常会在命令行中使用以下命令激活:
python manage.py load_concerts name_of_file.json
我如何使我的scraper脚本(同样在Django项目之外)运行命令?
(搜索这些搜索字词让我问了一个相反的问题,问如何从命令行运行python脚本。我想从python脚本运行命令提示符。)
答案 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')
答案 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