【问题标题】:How to run a Django shell command from a script outside the Django project如何从 Django 项目外部的脚本运行 Django shell 命令
【发布时间】:2026-01-24 12:35:01
【问题描述】:

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

我的爬虫将数据文件复制到我的 Django 项目中。我想要的是让那个爬虫脚本运行我的自定义命令,我通常会在命令行中激活它:

python manage.py load_concerts name_of_file.json

如何让我的爬虫脚本(同样位于 Django 项目之外)运行命令?

(谷歌搜索这些搜索词让我提出相反的问题,询问如何从命令行运行 python 脚本。我想从 python 脚本运行命令提示符。)

【问题讨论】:

  • Python的子进程模块?
  • 有时只需要模块名称。非常感谢,这非常有效。

标签: python django command-line


【解决方案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

【讨论】:

【解决方案2】:

您也可以通过让脚本向特定 URL 发送 GET 请求来非常简单地实现这一点,并且您可以将 Django 中的 URL 映射到特定视图。 现在您可以在该视图函数中做任何您想做的事情。

对于 UNIX 系统,您可以简单地使用 CURL,而且我相信在 Windows 中这样做也相当容易,您需要稍微搜索一下。

【讨论】:

    【解决方案3】:

    我需要激活虚拟环境才能使我的 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/[my name]/.virtualenvs/[project dir]/bin/activate 不可执行,我必须使其可执行才能使脚本正常工作:

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

    【讨论】:

      最近更新 更多