非 flask 程序实现 Flask Shell

2018/4/29 posted in  Python 黑魔法

在 Flask 程序中,通过 flask cli 或者 flask-script 中的 shell 调试是一件非常爽的事情,但是如果不是 flask 程序,比如手写了一个 python server,如果想在程序中实现一个 manage.py 或者 shell,怎么做比较优雅?

我的思路是利用 Ipython 的强大,通过指定 命令,比如 python manage.py shell 来生成指定的上下文并启动 Ipython。

这时候利用了 IPython.start_ipython 方法。

import sys
import IPython
from IPython.terminal.ipapp import load_default_config

from finder.model import User, session

config = load_default_config()
context = create_content()

config.TerminalInteractiveShell.banner1 = '''
Python %s on %s
IPython: %s''' % (sys.version, sys.platform, IPython.__version__,)
IPython.start_ipython(user_ns=context, config=config)

其中的 config 可以实现更多的自定义,参考文档:https://ipython.org/ipython-doc/3/config/intro.html