Python?命令行?prompt_toolkit?庫詳解
Python 的第三方庫 prompt_toolkit
用于打造交互式命令行,在交互式場景的使用中,prompt_toolkit
具有以下特點:
- 語法高亮
- 支持多行編輯
- 支持代碼補全
- 支持自動提示
- 使用鼠標(biāo)移動光標(biāo)
- 支持查詢歷史
- 對 Unicode 支持良好
- 跨平臺
- 支持 Emacs 與 Vi 風(fēng)格的快捷鍵
prompt_toolkit
在使用前需要先進行安裝:
pip install prompt_toolkit
一. 使用 Bash 下常用快捷鍵
想必很多開發(fā)者在創(chuàng)建交互式命令行工具時,使用最多的還是 input
和 raw_input
。比如下面的代碼讀取用戶輸入數(shù)據(jù),并進行打?。?/p>
while True: # user_input = input('>') user_input = raw_input('>') print(user_input) if user_input.strip().lower() == 'exit': break
上述程序在 Linux 環(huán)境下運行時,我們將無法使用任何的 Linux 快捷鍵,甚至在輸入錯誤時,按退格刪除內(nèi)容都會出現(xiàn)問題:
下面,我們使用 prompt_toolkit
模塊中的 prompt
函數(shù)改寫上述程序:
from __future__ import print_function from prompt_toolkit import prompt while True: user_input = prompt(u'>>') print(user_input)
運行新的程序,你會發(fā)現(xiàn),不僅可以實現(xiàn)退格刪除,而且可以使用 Bash
下常用的快捷鍵:Ctrl + a
跳轉(zhuǎn)到開頭、Ctrl + e
跳轉(zhuǎn)到末尾、Ctrl + k
刪除光標(biāo)到末尾的內(nèi)容。
二. 實現(xiàn)查找歷史命令
在 Bash 下,我們可以使用方向鍵中的 ↑
和 ↓
查看歷史輸入,或者使用 Ctrl + r
搜索歷史命令:
在 Python 打造的交互式命令行中,使用 prompt_toolkit.history
我們可以很容易實現(xiàn)查找歷史:
from __future__ import print_function from __future__ import unicode_literals from prompt_toolkit import prompt from prompt_toolkit.history import FileHistory while True: user_input = prompt('>>>', history=FileHistory('history.txt')) print(user_input)
運行結(jié)果:
上述歷史輸入將被保存至當(dāng)前目錄下的 history.txt
文件中,后續(xù)就可以使用查看或搜索歷史命令了~
三. 根據(jù)歷史輸入自動提示
在上面是示例中我們實現(xiàn)了查看或搜索歷史輸入的功能,其實我們還可以更加充分地利用 history.txt
中記載的歷史輸入,在用戶輸入時進行提示。實現(xiàn)此功能只需要在調(diào)用 prompt
函數(shù)時指定 auto_suggest
的參數(shù)即可:
from __future__ import print_function from __future__ import unicode_literals from prompt_toolkit import prompt from prompt_toolkit.history import FileHistory from prompt_toolkit.auto_suggest import AutoSuggestFromHistory while True: user_input = prompt('>>>', history=FileHistory('history.txt'), auto_suggest=AutoSuggestFromHistory()) if user_input.strip().lower() == 'exit': break print(user_input)
prompt_toolkit
將以暗色字體顯示匹配的歷史輸入:
四. 實現(xiàn)輸入的自動補全
所謂自動補全,即用戶輸入了關(guān)鍵字的一部分,我們的交互式程序能夠根據(jù)已有的輸入進行提示,用戶可以使用 Tab 鍵補全選擇提示的內(nèi)容。以上功能,prompt_toolkit
提供了名為 WorldCompleter
的類來幫助我們實現(xiàn)。下面我們來模仿 MySQL 客戶端的提示功能:
from __future__ import print_function from __future__ import unicode_literals from prompt_toolkit import prompt from prompt_toolkit.history import FileHistory from prompt_toolkit.auto_suggest import AutoSuggestFromHistory from prompt_toolkit.contrib.completers import WordCompleter SQLCompleter = WordCompleter(['select', 'from', 'insert', 'update', 'delete' 'drop'], ignore_case=True) while True: user_input = prompt('SQL>', history=FileHistory('history.txt'), auto_suggest=AutoSuggestFromHistory(), completer=SQLCompleter) if user_input.strip().lower() == 'exit': break print(user_input)
到此這篇關(guān)于Python 命令行 - prompt_toolkit 庫的文章就介紹到這了,更多相關(guān)Python prompt_toolkit 庫內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python測試框架:pytest學(xué)習(xí)筆記
這篇文章主要介紹了Python測試框架:pytest的相關(guān)資料,幫助大家更好的利用python進行單元測試,感興趣的朋友可以了解下2020-10-10python+jinja2實現(xiàn)接口數(shù)據(jù)批量生成工具
這篇文章主要介紹了python+jinja2實現(xiàn)接口數(shù)據(jù)批量生成工具的操作方法,本文給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下2019-08-08