我正在编写支持我的Django项目开发的脚本。首先我想到为此目的使用bash,但由于缺乏足够的知识和完全缺乏时间,我决定使用argparse并使用子进程运行系统命令来编写一些东西。
一切顺利,直到我不得不跑
./manage.py migrate
我是通过运行来实现的:
import subprocess
...
subprocess.Popen("python {} migrate".format(absolute_path_to_manage_py).split())
输出似乎没问题:
Operations to perform:
Apply all migrations: sessions, admin, auth, contenttypes, accounts, pcb
Running migrations:
Rendering model states... DONE
Applying contenttypes.0001_initial... OK
...
Applying sessions.0001_initial... OK
它突然停止,但脚本仍处于活动状态(它仍然在运行),当我运行django app时更糟糕的是我得到一条消息,我仍然有一些未应用的迁移。
我想我不知道从Python运行系统命令或与django迁移相关的东西。
任何提示我如何克服这一点?
答案 0 :(得分:1)
启动子进程的推荐方法是使用以下方法 便利功能。对于更高级的用例,当这些没有时 满足您的需求,使用基础
Popen
界面。
您可以使用等待命令完成的subprocess.call()
:
returncode = subprocess.call(["python", absolute_path_to_manage_py, "migrate"])
答案 1 :(得分:1)
您可以使用call_command
:
from django.core.management import call_command
call_command('migrate')