【发布时间】:2016-02-04 08:53:44
【问题描述】:
我正在编写支持我的 Django 项目开发的脚本。首先,我想为此使用 bash,但由于缺乏足够的知识和完全没有时间,我决定使用 argparse 编写一些东西并使用 subprocess 运行系统命令。
一切都很顺利,直到我不得不运行
./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 迁移相关的东西一无所知。
任何提示我如何克服这个问题?
【问题讨论】:
-
POpen 是解锁功能。您应该通过管道或使用阻塞功能。你可以试试 subprocess.check_call docs.python.org/2/library/subprocess.html#module-subprocess
-
尝试
subprocess.check_call([sys.executable, 'manage.py', 'migrate'], cwd=os.path.dirname(absolute_path_to_manage_py)),从其目录运行manage.py并等待它完成(在非零退出状态时引发异常)
标签: python django subprocess django-migrations