无法通过子进程从app / views.py运行manage.py命令

时间:2019-05-22 15:22:06

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

Python / Django新手在这里!

在我的新项目中,我能够加载django模板页面和admin部分,以及从admin中更新和删除内容...我能够毫无问题地收集static,而且我也可以运行来自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 /
    • include /
    • lib /
    • 分享/
    • myweb /
      • db.sqlite3
      • manage.py
      • myweb /
      • some_app /
        • views.py
        • ect ...
      • tatic /
      • 模板/

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

设置信息:

  • Ubuntu服务器18.04
  • Apache 2.4.29
  • 带有Python 3.6.7的virtualenv
  • Django2.2.1

1 个答案:

答案 0 :(得分:0)

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

some_app /
views.py(您在这里)
project_name /
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>")

或者简单地:

  

丹尼尔·罗斯曼(Daniel Roseman)在评论中写道

call_command('check')