11

我正在尝试在我的 Django 项目中使用 Werkzeug,它本质上是一个网页 Python shell 接口。我想运行诸如python manage.py syncdband之类的命令,python manage.py migrate但在 Python shell 中它不是很简单。

import manage从那里尝试并尝试了命令,但从 manage.py 的源代码来看,没有什么可调用的,因为它将参数传递给django.core.management.execute_from_command_line().

我还尝试定义一个函数,如图所示“从 Python 运行 shell 命令并捕获输出”,但使用

runProcess('Python manage.py syncdb')

仅返回:

<generator object runProcess at 0x000000000520D4C8>
4

2 回答 2

19

你可以从命令行启动一个 Django shell:

python manage.py shell

然后导入execute_from_command_line

from django.core.management import execute_from_command_line

最后,您可以执行所需的命令:

execute_from_command_line(["manage.py", "syncdb"])

它应该可以解决您的问题。

作为替代方案,您还可以查看subprocess 模块文档。您可以执行一个进程,然后检查其输出:

import subprocess
output = subprocess.check_output(["python", "manage.py", "syncdb"])
for line in output.split('\n'):
    # do something with line
于 2013-04-07T18:16:14.093 回答
1

注意:这是用于交互式使用,而不是您可以放入生产代码中的东西。

如果您使用的是ipython,您可以这样做

!python manage.py syncdb

这 '!' 说:

我想像执行 shell 命令一样执行它

如果你安装了 pip,你可以通过以下方式获取 ipython:

pip install ipython

您希望在命令行(而不是在 Python 解释器中)运行它。您可能需要sudo在前面加上一个,这取决于您的环境是如何设置的。

于 2013-04-07T18:46:11.953 回答