如何 运行 Django 应用程序中的终端命令?

How to run a terminal command in Django app?

每当我访问我的 Django 应用程序中的索引页面时,我想执行一个终端命令。我已经在 Django 应用程序之外完成了它并且它有效。在我的 Django 应用程序之外,我 运行:

import subprocess
subprocess.run('python hello.py')

包含常规打印语句 print('Hello') 和终端中的 hello.py 文件从我 运行 使用上述脚本的命令开始,它当然会像魅力一样打印“Hello”。

我的问题是,是否可以在我的 Django 应用程序中 运行 像下面这样的东西?

def index(request):
    subprocess.run('python manage.py process_tasks')

    today = datetime.now()
    schedule_time = datetime(year=today.year, month=today.month, day=today.day, hour=today.hour + 5,
                         minute=today.minute + 1,
                         tzinfo=pytz.UTC)

    run_until = datetime(year=today.year, month=today.month, day=today.day, hour=today.hour + 5,
                     minute=today.minute + 1,
                     tzinfo=pytz.UTC)

    print_hello(schedule=schedule_time, repeat=20, repeat_until=run_until)

    return HttpResponse(f'Background task running...')

通过在视图函数中包含这个命令 subprocess.run('python manage.py process_tasks') 它至少会消除我打开另一个终端到 运行 python manage.py process_tasks 让应用程序在后台为我工作。

应用成功进入页面,但后台任务未启动,终端显示 ModuleNotFoundError:没有名为 'background_task' 的模块。这是带有错误消息的图像,以便更好地理解。谢谢!

ModuleNotFoundError

我发现了问题...缩小错误范围后。它试图在 PATH 而不是虚拟环境中使用 python.exe。

subprocess.Popen('C:...project_name\venv\Scripts\python.exe manage.py process_tasks')

完美的完成了任务!