陆陆续续在很多场景下使用过 Jupyter-Notebook,作为一个团队协同的交互式编程环境,在以下几类工具 / 脚本开发的场合下,Jupyter 很适合于作为开发的 Playground——

    1. 执行网络请求相关任务

    • 如对某些服务的原生 API 做批量查询 / 聚合查询等(裸接口包装)
    • 配合数据加工、生成任务报表 / Issue / Task,或发送富文本邮件等
    • 爬虫撰写

    Modules: requests, jinja2

    2. 作为增强 Shell,进行系统管理

    主要是受益于 Python 灵活的语言特性及核心库的丰富能力,如文件批处理(os, glob)、字符串处理(re, 正则表达式)、JSON 序列化等等。

    此外 Jupyter-Notebook 能很好归档一些短平快任务脚本,避免辛苦写完的代码沦为日后看不懂的一锤子买卖。需求描述 / 代码逻辑备注可以用 Markdown 灵活写在单独的 Cell 中,更为美观且便于维护。

    一个 Notebook ( ipynb ) 可以通过命令行执行,因此也可以定义为定时任务 ( crontab ) ,跟执行脚本一样。

    3. 数据分析及可视化处理

    Python 有很多数据库模块,方便连接不同的数据源,并进行数据加工、生成表格 / 图表等等。(可参考很多数据工程师的工具箱)

    Modules: numpy, matplotlib, pandas, ipywidgets

    4. Jupyter 拓展能力

    Jupyter-Notebook 可以作为一个 REST Server 对外提供暴露自定义的 API Endpoint (不要尝试之,Python 世界轻量 WebServer 真的不少了),个人觉得唯一有用的场景是临时需要台 HTTPS Server 时(由于部署 Jupyter 时已经折腾过了 SSL 证书等)

    Jupyter-Notebook 有很强的插件生态及多维度的拓展性,参考:

    5. 总结

    基于以上描述,什么场景非常适合部署一套 Jupyter?试举两例:

    • 代码 & 文档 & 数据 混排及对外展示的一个知识库平台
    • 无线测试 Console —— 比如在一台连接多部测试手机的服务器上部 Jupyter,做 adb log / dumpsys 文本解析等等