【问题标题】:How to execute manage.py from the Python shell如何从 Python shell 执行 manage.py
【发布时间】:2013-04-07 18:09:45
【问题描述】:

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

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

我也尝试定义一个函数,如“Running shell command from Python and capturing the output”所示,但调用它使用

runProcess('Python manage.py syncdb')

只返回:

<generator object runProcess at 0x000000000520D4C8>

【问题讨论】:

    标签: python django


    【解决方案1】:

    你可以从命令行启动一个 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 module documentation。你可以执行一个进程,然后检查它的输出:

    import subprocess
    output = subprocess.check_output(["python", "manage.py", "syncdb"])
    for line in output.split('\n'):
        # do something with line
    

    【讨论】:

      【解决方案2】:

      注意:这是为了交互使用,不能放在生产代码中。

      如果你使用ipython,你可以这样做

      !python manage.py syncdb
      

      “!”说:

      我想像 shell 命令一样执行它

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

      pip install ipython
      

      您希望在命令行中运行(而不是在 Python 解释器中)。您可能需要在前面加上sudo,具体取决于您的环境设置方式。

      【讨论】:

      • 这将是理想的解决方案,但是在安装 ipython 之后,在导入 IPython 之前和之后,从 python shell 运行 !python manage.py syncdb 会在 ! 上返回语法错误。
      • 你还在用'python'启动python shell吗?你会想要使用'ipython'。 ipython shell 的工作方式与 python shell 类似,但增加了一些功能,例如 '!'。
      • 啊,有道理,但它并没有真正解决原来的问题,因为 werkzeug 使用普通的 Python shell。 (除非我错过了一些让你指定使用 ipython shell 的设置)
      猜你喜欢
      • 1970-01-01
      • 2012-05-20
      • 2015-12-19
      • 1970-01-01
      • 2014-09-19
      • 1970-01-01
      • 2011-06-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多