リッチPythonライブラリと美しいクリス


AWS、Kubernetes、Python、JavaScriptなどのコンテンツを書く.すべての最新のコンテンツを表示するには、必ずvisit my blog そして、私のニュースレターを購読してください..

This is Day 13 of the #100DaysOfPython challenge.


このポストはrich PythonのCLI出力にいくつかの色と書式を追加する方法を示すライブラリ.

必要条件
  • 親しみPipenv . 参照here Pipenvの上の私のポストのために.
  • 読めるPretty errors in Python Pythonでかなりのエラー出力を作る方法に関する私のポストのために.
  • 読めるCLI Prompts in Python CLIをPythonでプロンプトする方法に関する私のポストのために.
  • 読めるBuilding CLIs with python-fire クリスを構築する私のイントロのためにpython-fire それは今日使用されます.
  • どのようにPython Fire 作品
  • これは前の投稿の内容からPretty errors in Python .
    ポストを理解する必要がない間、同じコードを使用することを望んでいるならば、それを読むことはお勧めです.

    始める
    シリーズのこの段階でcli.py プロジェクトフォルダの場合は次のようになります.
    #!/usr/bin/env python
    import fire
    from PyInquirer import prompt
    import pretty_errors
    
    
    class IngestionStage(object):
        def run(self):
            return 'Ingesting! Nom nom nom...'
    
    
    class DigestionStage(object):
        def __init__(self):
            self.satiated = False
    
        def run(self, volume: int) -> str:
            questions = [
                {
                    'type': 'input',
                    'name': 'volume',
                    'message': 'How many burps?',
                }
            ]
            if volume == 0:
                volume = int(prompt(questions)['volume'])
            self.satiated = True
            return ' '.join(['Burp!'] * volume)
    
        def breakfast(self):
            questions = [
                {
                    'type': 'list',
                    'name': 'breakfast',
                    'message': 'What did you want for breakfast?',
                    'choices': ['eggs', 'bacon', 'toast']
                }
            ]
            switcher = {
                'eggs': 1,
                'bacon': 2,
                'toast': 3,
            }
            volume = switcher.get(prompt(questions)['breakfast'], 0)
    
            self.satiated = True
            return ' '.join(['Burp!'] * volume)
    
        def status(self):
            return 'Satiated.' if self.satiated else 'Not satiated.'
    
    
    class Pipeline(object):
    
        def __init__(self):
            self.ingestion = IngestionStage()
            self.digestion = DigestionStage()
    
        def run(self, volume: int = 1):
            print(self.ingestion.run())
            print(self.digestion.run(volume=volume))
            print(self.digestion.status())
            return 'Pipeline complete'
    
    
    if __name__ == '__main__':
        fire.Fire(Pipeline)
    
    今日のポストでは、我々はそれを使用する方法を簡単にデモを表示することを望んでいるrich 出力に色を追加します.
    我々は、追加することができますrich 以下のコマンドを実行して、現在のPipenv環境へのライブラリ
    # Add rich to dependencies
    $ pipenv install rich
    
    我々は今、我々の入力を更新する準備が整いました.

    出力への色の追加
    私たちは、どのようにリッチは、消化権のクラスのメソッドのステータスに色を追加する簡単な例で動作するデモを行います.
    現在のところ、このメソッドは以下のようになります:
    def status(self):
            return 'Satiated.' if self.satiated else 'Not satiated.'
    
    現在、端末に以下のコマンドを実行した場合、色のない出力が得られます.
    $ python cli.py run --volume 2
    Ingesting! Nom nom nom...
    Burp! Burp!
    Satiated.
    Pipeline complete
    $ python cli.py digestion status
    Not satiated.
    
    私たちがしたいことは、出力にいくつかの色を追加することですが、関数を更新するにはprint 関数からrich 図書館と我々が最後に返すものを更新します.
    以下のようにします.
    # Top of the file
    from rich import print
    
    # ... code omitted for brevity
    
    # Back at the `status` definition.
    def status(self):
            print('[bold green]Satiated.[/bold green]') if self.satiated else print(
                    '[bold red]Not satiated.[/bold red]')
            return 'Status complete'
    
    上記のコマンドを再実行すると出力はわずかに調整されますがself.satiated 本当のとき、太字の緑で印刷された出力self.satiated 出力は偽で赤で印刷されます.
    $ python cli.py run
    Ingesting! Nom nom nom...
    Burp!
    Satiated.
    Status complete
    Pipeline complete
    $ python cli.py digestion status
    Not satiated.
    Status complete
    


    概要
    今日のポストは、使用する方法を示しましたrich パッケージを出力に色を追加します.

    資源と更なる読書
  • The ABCs of Pipenv
  • Pipenv
  • Pretty errors in Python
  • CLI Prompts in Python
  • Building CLIs with python-fire
  • Python Fire
  • rich
  • フォトクレジット pawel_czerwinski
    もともと私の投稿blog . 遅滞なく新しいポストを見るために、そこのポストを読んで、私の会報を購読してください.