【问题标题】:Unable to run a manage.py command from app/views.py via subprocess无法通过子进程从 app/views.py 运行 manage.py 命令
【发布时间】:2019-10-09 03:21:15
【问题描述】:

这里是 Python/Django 新手!

在我的新项目中,我能够加载 django 模板页面和管理部分,以及更新和删除管理中的内容......我已经能够毫无问题地收集静态,我也可以运行所有来自 bash 的带有 manage.py 的命令,都来自 virtualenv 内部。

我被卡住的地方是尝试通过子进程从应用程序的 views.py 运行“python manage.py check”,例如:

some_app/views.py

from django.shortcuts import render
from django.http import HttpResponse
import subprocess
import shlex

def home(request):
    cmd = 'python manage.py check'
    subprocess.Popen(shlex.split(cmd))
    return HttpResponse("<html><body>Hello World</body></html>")

HTML“Hello World”加载正常,子进程命令导致 Apache 错误:

"python: can't open file 'manage.py': [Errno 2] No such file or directory".

"python: can't open file '../myweb/manage.py': [Errno 2] No such file or directory".

我不确定我知道这是为什么,这是我的文件结构:

  • /var/www/project (venv)
    • bin/
    • 包括/
    • lib/
    • 分享/
    • 我的网站/
      • db.sqlite3
      • manage.py
      • 我的网络/
      • some_app/
        • views.py
        • 等等...
      • 静态/
      • 模板/

如果有人有任何提示,我将不胜感激!

设置信息:

  • Ubuntu 服务器 18.04
  • Apache 2.4.29
  • virtualenv w/python 3.6.7
  • Django2.2.1

【问题讨论】:

标签: django apache virtualenv ubuntu-18.04 django-manage.py


【解决方案1】:

你必须声明正确的相对路径

一些应用程序/
views.py(你在这里)
项目名称/
manage.py(你必须去这里)

这样就变成了:

def home(request):
    cmd = 'python ../project_name/manage.py check'
    subprocess.Popen(shlex.split(cmd))
    return HttpResponse("<html><body>Hello World</body></html>")

或者简单地说:

正如丹尼尔·罗斯曼在他的 cmets 中所写的那样

call_command('check')

【讨论】:

  • 感谢您的回复,我试过这种方法没有成功。
  • /var/www/project/myweb/manage.py 旁边 db.sqlite3 如上图
猜你喜欢
  • 2013-09-11
  • 2012-01-13
  • 1970-01-01
  • 1970-01-01
  • 2019-06-25
  • 2018-11-12
  • 2013-11-22
  • 1970-01-01
  • 2019-05-25
相关资源
最近更新 更多