91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Python怎么快速構建命令行用戶界面

發布時間:2022-01-25 09:22:10 來源:億速云 閱讀:204 作者:iii 欄目:開發技術

這篇文章主要介紹“Python怎么快速構建命令行用戶界面”的相關知識,小編通過實際案例向大家展示操作過程,操作方法簡單快捷,實用性強,希望這篇“Python怎么快速構建命令行用戶界面”文章能幫助大家解決問題。

Python Prompt Toolkit

我習慣于把這個庫稱為命令行應用的瑞士軍刀,它可以作為readline、curses等的替代品。讓我們首先安裝這個庫,然后開始該教程:

pip install prompt_toolkit

我們以一個簡單的 REPL (LCTT 譯注:REPL —— Read-Eval-Print Loop,交互式開發環境)開始。一個典型的 REPL 會接收用戶的輸入,進行一個操作,然后輸出結果。比如在我們的例子中,我們將要實現一個具有 “回顯” 功能的 REPL 。它僅僅是原樣打印出用戶的輸入:

REPL

from prompt_toolkit import promptwhile 1:
   user_input = prompt('>')
   print(user_input)

這就是實現 REPL 的全部代碼。它可以讀取用戶的輸入,然后打印出用戶的輸入內容。在這段代碼中使用的prompt函數來自 prompt_toolkit庫,它是readline庫的一個替代品。

命令歷史

為了增強我們的 REPL 的功能,我們可以添加命令歷史:

from prompt_toolkit import prompt
from prompt_toolkit.history import FileHistorywhile 1:
   user_input = prompt('>',
                       history=FileHistory('history.txt'),
                      )
   print(user_input)

我們剛剛給 REPL 添加了持久的命令歷史。現在,我們可以使用上/下箭頭來瀏覽命令歷史,并使用Ctrl-R來搜索命令歷史。它滿足了命令行的基本準則。

自動推薦

在第一篇教程中,我講到的一個可發現性技巧是自動推薦歷史命令。(我是首先在 fish shell 中看到的這一特性)讓我們把這一特性加入到我們的 REPL 中:

from prompt_toolkit import prompt
from prompt_toolkit.history import FileHistory
from prompt_toolkit.auto_suggest import AutoSuggestFromHistorywhile 1:
   user_input = prompt('>',
                       history=FileHistory('history.txt'),
                       auto_suggest=AutoSuggestFromHistory(),
                      )
   print(user_input)

我們只需要給prompt() API 調用添加一個新的參數。現在,我們有了一個具有fish shell風格的 REPL,它可以自動推薦歷史命令。

自動補全

現在,讓我們通過自動補全來加強 Tab 補全。它能夠在用戶開始輸入的時候彈出可能的命令推薦。

REPL 如何來進行推薦呢?我們使用一個字典來進行可能項的推薦。

比如說我們實現一個針對 SQL 的 REPL 。我們可以把 SQL 關鍵字存到自動補全字典里面。讓我們看一看這是如何實現的:

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 1:
   user_input = prompt('SQL>',
                       history=FileHistory('history.txt'),
                       auto_suggest=AutoSuggestFromHistory(),
                       completer=SQLCompleter,
                       )
   print(user_input)

再次說明,我們只是簡單的使用了 prompt-toolkit 內建的一個叫做 WordCompleter 的補全特性,它能夠把用戶輸入和可能推薦的字典進行匹配,然后提供一個列表。

現在,我們有了一個能夠自動補全、fish shell 風格的歷史命令推薦以及上/下瀏覽歷史的 REPL 。實現這些特性只用了不到 10 行的實際代碼。

Click

Click是一個命令行創建工具包,使用它能夠更容易的為程序解析命令行選項的參數和常量。在這兒我們不討論如何使用Click來作為參數解析器。相反,我們將會看看Click帶有的一些功能。

安裝Click:

pip install click

分頁器是 Unix 系統上的實用工具,它們能夠一次一頁地顯示很長的輸出。分頁器的一些例子包括less、more、most等。通過分頁器來顯示一個命令的輸出不僅僅是一個友好的設計,同時也是必要的。

讓我們進一步改進前面的例子。我們不再使用默認print()語句,取而代之的是click.echo_via_pager()。它將會把輸出通過分頁器發送到標準輸出。這是平臺無關的,因此在 Unix 系統或 Windows 系統上均能工作。如果必要的話,click_via_pager 會嘗試使用一個合適的默認分頁器來輸出,從而能夠顯示代碼高亮。

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
import click

SQLCompleter = WordCompleter(['select', 'from', 'insert', 'update', 'delete', 'drop'],
                            ignore_case=True)while 1:
   user_input = prompt(u'SQL>',
                       history=FileHistory('history.txt'),
                       auto_suggest=AutoSuggestFromHistory(),
                       completer=SQLCompleter,
                       )
   click.echo_via_pager(user_input)

編輯器

在我前面的文章中一個值得一提的細節是,當命令過于復雜的時候進入編輯器來編輯。Click 有一個簡單的 API 能夠打開編輯器,然后把在編輯器中輸入的文本返回給應用。

import click
message = click.edit()
Fuzzy Finder

Fuzzy Finder 是一種通過少量輸入來為用戶減少推薦的方法。幸運的是,有一個庫可以實現 Fuzzy Finder 。讓我們首先安裝這個庫:

pip install fuzzyfinder

Fuzzy Finder的 API 很簡單。用戶向它傳遞部分字符串和一系列可能的選擇,然后,Fuzzy Finder將會返回一個與部分字符串匹配的列表,這一列表是通過模糊算法根據相關性排序得出的。比如:

>>> from fuzzyfinder import fuzzyfinder

>>> suggestions = fuzzyfinder('abc', ['abcd', 'defabca', 'aagbec', 'xyz', 'qux'])

>>> list(suggestions)
['abcd', 'defabca', 'aagbec']

現在我們有了fuzzyfinder>,讓我們把它加入到我們的 SQL REPL 中。方法是我們自定義一個completer而不是使用來自prompt-toolkit庫的WordCompleter。比如:

from prompt_toolkit import prompt
from prompt_toolkit.history import FileHistory
from prompt_toolkit.auto_suggest import AutoSuggestFromHistory
from prompt_toolkit.completion import Completer, Completion
import click
from fuzzyfinder import fuzzyfinder

SQLKeywords = ['select', 'from', 'insert', 'update', 'delete', 'drop']

class SQLCompleter(Completer):
   def get_completions(self, document, complete_event):
       word_before_cursor = document.get_word_before_cursor(WORD=True)
       matches = fuzzyfinder(word_before_cursor, SQLKeywords)
       for m in matches:
           yield Completion(m, start_position=-len(word_before_cursor))while 1:
   user_input = prompt(u'SQL>',
                       history=FileHistory('history.txt'),
                       auto_suggest=AutoSuggestFromHistory(),
                       completer=SQLCompleter(),
                       )
   click.echo_via_pager(user_input)
Pygments

現在,讓我們給用戶輸入添加語法高亮。我們正在搭建一個 SQL REPL,如果具有彩色高亮的 SQL 語句,這會很棒。

Pygments是一個提供語法高亮的庫,內建支持超過 300 種語言。添加語法高亮能夠使應用變得彩色化,從而能夠幫助用戶在執行程序前發現 SQL 中存在的錯誤,比如拼寫錯誤、引號不匹配或括號不匹配。

首先,安裝Pygments:

pip install pygments

讓我們使用Pygments來為 SQL REPL 添加顏色:

from prompt_toolkit import prompt
from prompt_toolkit.history import FileHistory
from prompt_toolkit.auto_suggest import AutoSuggestFromHistory
from prompt_toolkit.completion import Completer, Completion
import click
from fuzzyfinder import fuzzyfinder
from pygments.lexers.sql import SqlLexer

SQLKeywords = ['select', 'from', 'insert', 'update', 'delete', 'drop']

class SQLCompleter(Completer):
   def get_completions(self, document, complete_event):
       word_before_cursor = document.get_word_before_cursor(WORD=True)
       matches = fuzzyfinder(word_before_cursor, SQLKeywords)
       for m in matches:
           yield Completion(m, start_position=-len(word_before_cursor))while 1:
   user_input = prompt(u'SQL>',
                       history=FileHistory('history.txt'),
                       auto_suggest=AutoSuggestFromHistory(),
                       completer=SQLCompleter(),
                       lexer=SqlLexer,
                       )
   click.echo_via_pager(user_input)

Prompt Toolkit能夠和Pygments一同很好的工作。我們把Pygments提供的SqlLexer加入到來自prompt-toolkit的prompt中。現在,所有的用戶輸入都會被當作 SQL 語句,并進行適當著色。

關于“Python怎么快速構建命令行用戶界面”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識,可以關注億速云行業資訊頻道,小編每天都會為大家更新不同的知識點。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

潜江市| 荣成市| 哈尔滨市| 柳江县| 宁夏| 莲花县| 综艺| 义乌市| 修水县| 郸城县| 西华县| 驻马店市| 兴文县| 德庆县| 闽清县| 贡觉县| 娄底市| 宝山区| 木里| 绥德县| 监利县| 奉贤区| 乐陵市| 佛冈县| 清河县| 东阿县| 长顺县| 白沙| 故城县| 兴仁县| 五指山市| 名山县| 桃园市| 大埔区| 英超| 安吉县| 合肥市| 涞水县| 武清区| 张北县| 特克斯县|