<button id="2ddn7"><acronym id="2ddn7"></acronym></button>

<button id="2ddn7"><acronym id="2ddn7"></acronym></button>

  • <button id="2ddn7"><object id="2ddn7"></object></button>
      1. <s id="2ddn7"></s>
        更多課程 選擇中心


        Python培訓

        400-111-8989

        還在手寫命令行功能?你out了!看Python庫如何自動實現!

        • 發布:fighteryu
        • 來源:python.jobbole
        • 時間:2019-01-21 17:55

        如果你還在手寫命令行功能?那你out了,我們今天將分享四個Python庫自動實現命令行功能,這可比手寫快多了,還不趕緊來學學?

        Python庫如何自動實現命令行功能

        Python 提示工具包

        我喜歡將這個庫看作是像瑞士軍刀那樣集大成者的命令行應用程序,它可以替代 readline,curses 等等。 讓我們來安裝這個庫并開始使用:

        pip install prompt_toolkit

        我們將從簡單的 REPL 開始。 通常 REPL 將接受用戶輸入,執行操作并打印結果。 對于我們的例子,我們要構建一個“echo”REPL。 它只是打印出用戶輸入的內容:

        交互式解釋器

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

        這就是實現 REPL 所需要的。它可以讀取用戶輸入并打印輸入的內容。此代碼段中使用的提示函數來自 prompt_toolkit 庫;它是 readline 庫的替代者。

        歷史記錄

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

        from prompt_toolkit import prompt
        
        from prompt_toolkit.history import FileHistory
        
        while 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 AutoSuggestFromHistory
        
        while 1:
        
        user_input = prompt('>',
        
        history=FileHistory('history.txt'),
        
        auto_suggest=AutoSuggestFromHistory(),
        
        )
        
        print(user_input)

        我們只需要在 prompt() API 調用中添加一個新的參數。現在我們的 REPL 已經可以支持類似 Fish Shell 那樣的歷史命令自動提示功能了。

        自動補全

        現在我們通過 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)

        再次,我們只需使用一個名為 WordCompleter 的 prompt-toolkit 的內置例程,它將用戶輸入與可能提示的字典進行匹配,并提供一個列表。

        我們現在有一個 REPL,它可以自動補全,fish 式的歷史提示,以及歷史命令的上下瀏覽。 所有這些都在不到 10 行的實際代碼中。

        命令行界面創建工具包

        Click 是一個命令行創建工具包,可以方便地解析程序的命令行選項參數和參數。 本節不介紹如何作為參數解析器使用Click;取而代之的是我將研究一些 Click 庫的其他功能的。

        安裝 click 很簡單

        pip install click

        分頁器

        分頁器是在 Unix 上用來一次性長輸出顯示的實用程序。分頁器包括一些 less, more, most等。通過分頁器顯示命令不僅僅是友好的設計,而且也是需要的。

        讓我們進一步來看以上的例子。我們可以用 click.echo_via_pager() 來代替默認的 print() 語句。這將通過分頁器將輸出傳遞給 stdout,這和平臺無關,因此可以在 Windows 或者 Unix 上運行。click.echo_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()

        模糊搜索

        模糊搜索是一種讓用戶通過最少的輸入來縮小提示。同樣有一個模糊搜索庫,讓我們安裝這個庫:

        pip install fuzzyfinder

        模糊搜索的API很簡單,你傳遞進部分字符串和一個可能選擇的列表,模糊搜索將返回一個新的列表,它和使用了按相關性排序的迷糊算法的字符串進行匹配,例如:

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

        現在我們有了模糊搜索,我們將它加入到我們的 SQL 交互式解釋器中。這樣就定義了一個完成器,而不是 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 交互式解釋器,并且擁有彩色的 SQL 語句會很好。

        Pygments 是一個語法高亮庫,內置支持300多種語言。添加語法高亮使得應用程序變成彩色的,可以幫助用戶在執行 SQL 之前發現一些例如打字錯誤或者無法匹配的引號和括號。

        首先安裝 Pygments

        pip install pygments

        讓我們用 pygments 給我們的 SQL 交互式解釋器添加顏色:

        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)

        提示工具包適用于 Pygments 庫。我們選擇 Pygments 提供的 SqlLexer 并將其從提示工具包傳遞給 API 。現在所有的用戶輸入都會被當作 SQL 語句并且添上了顏色。

        結論

        我們本次成果的結論是通過創建一個強大的交互式解釋器,擁有常見 shell 的所有功能,例如歷史記錄,鍵綁定,和很友好的自動完成,模糊搜索,分頁器,編輯器和語法高亮的功能。我們用少于 20 個 python 語句實現了所有這些。

        感謝您的閱讀,以上就是達內Python培訓今天分享給大家的四個Python庫自動實現命令行功能,你都學會了嗎?一定要在實踐的基礎上理解哦。更多Python相關的內容盡在達內Python培訓機構官網,敬請關注!

        免責聲明:內容和圖片源自網絡,版權歸原作者所有,如有侵犯您的原創版權請告知,我們將盡快刪除相關內容。

        預約申請免費試聽課

        填寫下面表單即可預約申請免費試聽!怕錢不夠?可就業掙錢后再付學費! 怕學不會?助教全程陪讀,隨時解惑!擔心就業?一地學習,可全國推薦就業!

        上一篇:什么是Python字符串切片?如何進行Python字符串切片操作?
        下一篇:干貨分享|32個常用的Python功能,你一定用得到!

        如何運用Python編程處理大數據?用Python編程處理大數據的技巧是什么?

        Python面向對象編程的知識點都在這了!

        Python的高級特征及用法(部分)

        聽說這些Python知識,很少有人知道!

        • 掃碼領取資料

          回復關鍵字:視頻資料

          免費領取 達內課程視頻學習資料

        • 視頻學習QQ群

          添加QQ群:1143617948

          免費領取達內課程視頻學習資料

        Copyright ? 2021 Tedu.cn All Rights Reserved 京ICP備08000853號-56 京公網安備 11010802029508號 達內時代科技集團有限公司 版權所有

        選擇城市和中心
        黑龍江省

        吉林省

        河北省

        湖南省

        貴州省

        云南省

        廣西省

        海南省

        青青青草网站免费观看|青青青视频在线观看 超真实强奷视频在线看 百度 好搜 搜狗
        <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <文本链> <文本链> <文本链> <文本链> <文本链> <文本链>