Python 外部脚本和未应用的迁移
我正在编写支持Django项目开发的脚本。首先,我考虑使用bash实现这一目的,但由于缺乏足够的知识和时间,我决定使用argparse编写一些东西,并使用subprocess运行系统命令 在我不得不跑步之前,一切都很顺利Python 外部脚本和未应用的迁移,python,django,subprocess,django-migrations,Python,Django,Subprocess,Django Migrations,我正在编写支持Django项目开发的脚本。首先,我考虑使用bash实现这一目的,但由于缺乏足够的知识和时间,我决定使用argparse编写一些东西,并使用subprocess运行系统命令 在我不得不跑步之前,一切都很顺利 ./manage.py migrate 我通过跑步来做到这一点: import subprocess ... subprocess.Popen("python {} migrate".format(absolute_path_to_manage_py).split()) 输
./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应用程序时,我收到一条消息,表示仍有一些未应用的迁移
我想我对从Python运行系统命令或与django迁移相关的东西一无所知
有什么提示我可以克服这个问题吗?来自:
启动子流程的推荐方法是使用以下命令
方便功能。对于更高级的用例,当这些不可用时
根据您的需要,使用底层的Popen
界面
您可以使用,它将等待命令完成:
returncode = subprocess.call(["python", absolute_path_to_manage_py, "migrate"])
从:
启动子流程的推荐方法是使用以下命令
方便功能。对于更高级的用例,当这些不可用时
根据您的需要,使用底层的Popen
界面
您可以使用,它将等待命令完成:
returncode = subprocess.call(["python", absolute_path_to_manage_py, "migrate"])
您可以使用以下命令直接调用管理命令,而不是使用子流程:
您可以使用以下命令直接调用管理命令,而不是使用子流程:
POpen具有解锁功能。您应该通过管道或使用阻塞功能。您可以尝试subprocess.check\u call try
subprocess.check\u call([sys.executable,'manage.py','migrate'],cwd=os.path.dirname(绝对路径到管理路径))
,从其目录运行manage.py
,并等待它完成(在非零退出状态下引发异常)POpen正在解除阻止功能。您应该通过管道或使用阻塞功能。您可以尝试subprocess.check\u call trysubprocess.check\u call([sys.executable,'manage.py','migrate'],cwd=os.path.dirname(绝对路径到管理路径))
,从其目录运行manage.py
,并等待它完成(在非零退出状态下引发异常)