外部脚本和未应用的迁移

时间:2016-02-04 08:53:45

标签: python django subprocess django-migrations

我正在编写支持我的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迁移相关的东西。

任何提示我如何克服这一点?

2 个答案:

答案 0 :(得分:1)

来自subprocess docs

  

启动子进程的推荐方法是使用以下方法   便利功能。对于更高级的用例,当这些没有时   满足您的需求,使用基础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')