分享

Python prompt_toolkit库

 啊司com 2017-02-28

prompt_toolkit是一个能够建立强大的交互式命令行和终端应用的python库。

详情可以阅读 documentation on readthedocs

Ptpython

ptpython是一个是交互式的Python解析器,建立在prompt_toolkit之上。

prompt_toolkit 特性

prompt_toolkit可以代替GNU readline,但它的功能远远不止。

一些特性如下:

  • 纯python编写

  • 打字时输入的语法高亮(例如,使用语法高亮工具的Pygment的lexer)

  • 多行输入编辑

  • 先进的代码完成功能

  • Emacs和Vi编辑器的按键绑定(和readline相似)

  • 甚至一些先进的Vi编辑器的功能,比如命名寄存器和可视化模式

  • 正向和反向的增量搜索

  • 可运行在Python2.6至3.5的所有版本上

  • Uicode双字节字符效果很好(中文输入)

  • 可以选择文本用于复制或粘贴(都是Emacs和Vi编辑器的风格)

  • 支持括号内的粘贴 bracketed paste

  • 鼠标支持光标定位和滚动

  • 自动建议(像 fish解析器)

  • 多输入缓存

  • 没有全局状态

  • 轻量型,只依赖Pygments、six和wcwidth

  • 可运行于Linux,OS X, FreeBSD, OpenBSD和Windows操作系统

  • 还有很多.....

创建问题和特性都是自由的,如果你有想分享给他人的好的补丁,可以创建一个pull request。

对Windows操作系统的支持

prompt_toolkit是跨平台的,你创建在上面的任何东西在Unix和Windows系统中应该都可以运行良好。在Windows中,它使用一种不同的数据循环(使用WaitForMultipleObjects 而不是select)和另外的输入输出系统(使用Win32API而不是伪终端和VT100)。

另一点值得注意的是“尽可能努力”的成就。Unix和Windows终端都有他们的限制。但是一般而言,Unix上的体验仍会好一点。

对Windows来说,推荐使用cmder 或者 conemu

安装

使用Conda,则

入门

这个库最简单的一个例子如下:

更多复杂的例子,查看“examples”目录。所有例子证明的都只是一个东西。并且,不要害怕去看源代码。提示功能的实现是一个好的开始。

Python2使用时注意:所有的字符串将为unicode字符串。所以,要么你在所有的字符串前面添加“u”,要么就在例子代码前导入uincode库( from __future__ import unicode_literals)。

使用prompt_toolkit的项目

 解析器:

  • ptpython: Python交互式开发环境(REPL,Read-Eval-Print Loop)

  • ptpdb: Python调试器(代替pdb)

  • pgcli: Postgres的客户端

  • mycli: MySql的客户端

  • wharfee:一个Docker命令行

  • xonsh: 一个python风格的、兼容Bash的解析器

  • saws:一个超强的AWS命令行接口

  • cycli: Cyper的一个命令行接口

  • crash: Crate的命令行客户端

  • vcli: Vertica客户端

  • aws-shell: 和AWS命令行共同工作的一个集成解析器

  • softlayer-python:管理SoftLayer产品和服务的一个命令行接口

  • ipython:IPython的交互式开发环境

  • click-repl: 点击的子命令交互式开发环境

  • haxor-news: 一个Hacker News的命令行接口

  • gitsome:集成有GitHub的一个Git或Shell的自动代码完成工具

  • http-prompt:一个交互式的命令行HTTP客户端

  • coconut: Python中函数式编程

  • Ergonomica:用Python编写的Bash的替代工具

 全屏应用:

  • pymux:一个类似于tmux的纯Python编写的终端复用器

  • pyvim: 一个纯Python编写的Vim

(想把你自己的项目列在这里?请创建一个GuitHub问题。)

代码哲学

prompt-toolkit的源代码应是可读的、简洁的和高效的。我们倾向于输入输出类型明确指定的聚焦于每一项任务的短小函数。我们更倾向于组合而不是继承,因为继承会导致同样一个对象中功能太多。我们倾向于在可能的情形下使用不可变对象(对象在初始化后不再变化)。可重用性是重要的。我们绝对避免拥有一个不断变化的全局状态,但在同一进程中拥有同一个代码的多个独立的实例是可以的。代码的体系结构应当分为:给定了原始操作和数据结构的所有正确的灵活组合后的底层操作;而在更高水平中,应该是一个更简单、随时可用和胜任大部分情况的API。对算法和效率的思考是很重要的,但是要避免对其草率的优化。


特别感谢


英文原文:https://github.com/jonathanslenders/python-prompt-toolkit
译者:我不刷碗


    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多