\r\n\r\n

クリックを使ってpythonで独自のコマンドライン・プログラムを作成する方法

Pythonのコマンドライン・プログラムを自作したいけど、難しそう......。コードを簡略化する便利なpythonツール、clickを使用...

Clickは、コマンドラインインターフェイスを書くためのPythonパッケージです。美しいドキュメントを生成してくれ、1行のコードでコマンドラインインターフェイスを構築することができます。要するに、素晴らしいものであり、あなたのプログラムを次のレベルに引き上げるのに役立つということです。

Pythonプロジェクトを盛り上げるための使い方を紹介します。

ワンクリックでコマンドラインプログラムが書ける

クリックを使わずにコマンドライン・プログラムを書くことも可能ですが、その場合、より多くの労力とより多くのコードが必要となります。コマンドラインパラメータの解析、バリデーションの実行、異なるパラメータを処理するロジックの開発、カスタムヘルプメニューの構築などが必要になります。新しいオプションを追加したいですか?その後、ヘルプ機能を修正することになります。

自分でコードを書くことは悪いことではありませんし、そうすることはPythonを学ぶ良い方法ですが、クリックによって「繰り返すな」(ドライ)の原則に従うことができます。クリックしないと、壊れやすいコードを書くことになり、何か変更があるたびに多くのメンテナンスが必要になります。

以下は、クリックのないシンプルなコマンドラインインターフェイスです。

import sysimport randomdef do_work():""" Function to handle command line usage"""args = sys.argvargs = args[1:] # First element of args is the file nameif len(args) == 0:print('You have not passed any commands in!')else:for a in args:if a == '--help':print('Basic command line program')print('Opti***:')print(' --help -> show this basic help menu.')print(' --monty -> show a Monty Python quote.')print(' --veg -> show a random vegetable')elif a == '--monty':print('What\'s this, then? "Romanes eunt domus"? People called Romanes, they go, the house?')elif a == '--veg':print(random.choice(['Carrot', 'Potato', 'Turnip']))else:print('Unrecognised argument.')if __name__ == '__main__':do_work()

この27行のPythonはよく動くのですが、非常に壊れやすいのです。プログラムに変更を加えるには、他の多くのサポートコードを変更する必要があります。パラメータ名を変更した場合、ヘルプメッセージの更新が必要です。このコードは簡単に手に負えなくなる。

クリックのロジックは同じです。

import clickimport [email protected]()@click.option('--monty', default=False, help='Show a Monty Python quote.')@click.option('--veg', default=False, help='Show a random vegetable.')def do_work(monty, veg):""" Basic Click example will follow your commands"""if monty:print('What\'s this, then? "Romanes eunt domus"? People called Romanes, they go, the house?')if veg:print(random.choice(['Carrot', 'Potato', 'Turnip']))if __name__ == '__main__':do_work()

このワンクリックの例では、同じロジックを16行のコードで実装しています。

この基本的な比較から、クリックなどのプログラムを使うことで、いかに時間と労力が節約できるかがわかります。エンドユーザーにはコマンドラインインターフェイスが同じに見えるかもしれませんが、基本的なコードはよりシンプルで、コーディング時間を大幅に短縮することができます。また、将来的に書く変更やアップデートは、開発時間を大幅に増やすことになります。

クリックするとpythonを始められます

クリックを使用する前に、仮想環境を設定することができます。これにより、PythonパッケージがシステムのPythonや作業中の他のプロジェクトと競合するのを防ぐことができます。また、Pythonで遊んでみたい方は、ブラウザでPythonをクリックすると、Pythonを試すことができます。

最後に、pythonversion3であることを確認してください。 クリックはpythonversion2でも使用できますが、これらの例はpython3です。python2とpython3の違いについて、詳しくはこちらをご覧ください。

準備ができたら、コマンドラインからPIPを使用し、インストール(Python用PIPのインストール方法)を以下のサイトでクリックします。

pip install click

最初のクリックプログラムを書く

テキストエディターで、Importから順にクリックします。

import click

インポート後、メソッドとメインエントリポイントを作成します。Python OOPガイドでは、これらについてより詳しく説明していますが、コードを保存する場所と、Pythonがコードの実行を開始する方法を提供しています:。

import clickimport randomdef veg(): """ Basic method will return a random vegetable""" print(random.choice(['Carrot', 'Potato', 'Turnip', 'Parsnip']))if __name__ == '__main__': veg()

この非常にシンプルなスクリプトは、ランダムな野菜を出力します。あなたのコードは違って見えるかもしれませんが、このシンプルな例は、Clickと組み合わせて使うのに最適です。

click_example.pyとして保存し、コマンドラインから(その場所に移動した後)次の場所で実行します。

python click_example.py

ランダムな野菜の名前が表示されるはずです。Clickを追加して改善しよう。クリックデコレーターとforループを含むようにコードを変更します。

@click.command()@click.option('--total', default=3, help='Number of vegetables to output.')def veg(total): """ Basic method will return a random vegetable""" for number in range(total): print(random.choice(['Carrot', 'Potato', 'Turnip', 'Parsnip']))if __name__ == '__main__': veg()

実行すると、ランダムな野菜が3回表示されます。

この変更点を少し整理してみましょう。那个@click.command命令() デコレーターの直後にある関数をクリックで使用するように設定されています。この場合、veg()関数になります。クリックで使用するすべてのメソッドに必要です。

那个@单击.optiondecorator配置单击以接受来自命令行的参数、これらのパラメータをあなたのメソッドに渡します。ここでは3つのパラメータを使用しています。

  1. -total:これは、totalパラメータのコマンドライン名です。
  2. デフォルト:スクリプトを使用する際に total パラメータが指定されていない場合、クリックするとデフォルトの値が使用されます。
  3. ヘルプ:プログラムの使い方を説明する短い文章です。

クリックアクションを見てみましょう。コマンドラインからスクリプトを実行しますが、以下のようにtotalパラメータを渡してください。

python click_example.py --total 10

コマンドラインから-10を設定すると、スクリプトはランダムに10個の野菜を印刷する。

helpフラグを渡すと、素敵なヘルプページが表示され、以下のオプションが利用できるようになります。

python click_example.py --help

コマンドの追加

複数の Click デコレーターを同じ関数で使用することができます。

@click.option('--gravy', default=False, help='Append "with gravy" to the vegetables.')

メソッドに渡すことを忘れないでください。

def veg(total, gravy):

今、このファイルを実行するとき、グラビフラグを渡すことができます。

python click_example.py --gravy y

また、ヘルプ画面も変更されました。

以下は、完全なコードです(整理整頓のために若干のリファクタリングを施しています)。

import clickimport [email protected]()@click.option('--gravy', default=False, help='Append "with gravy" to the vegetables.')@click.option('--total', default=3, help='Number of vegetables to output.')def veg(total, gravy): """ Basic method will return a random vegetable""" for number in range(total): choice = random.choice(['Carrot', 'Potato', 'Turnip', 'Parsnip']) if gravy: print(f'{choice} with gravy') else: print(choice)if __name__ == '__main__': veg()

その他のクリックオプション

基本的なことがわかったら、より複雑なクリックオプションに目を向けることができます。この例では、1つのパラメータに複数の値を渡して、1回のクリックでタプルに変換する方法を学びます。タプルについては、Python辞書ガイドで詳しく説明されています。

clicku exampleu 2.py というファイルを新規に作成します。 以下、必要なスタートアップコードです。

import clickimport [email protected]()def add(): """ Basic method will add two numbers together.""" passif __name__ == '__main__': add()

新しいことは何もありません。このコードは前のセクションで詳しく説明しました。添加@单击.option被叫号码。

@click.option('--numbers', nargs=2, type=int, help='Add two numbers together.')

ここで新しいコードは、nargs=2 と type=int のオプションだけです。これは、numbersオプションに2つの値を受け入れ、それらが両方とも整数型でなければならないことをクリックに指示します。これを好きな数値や(有効な)データ型に変更することができる。

最後に、addメソッドを変更して、数値のパラメータを受け取り、それに対して何らかの処理を行うようにします。

def add(numbers): """ Basic method will add two numbers together.""" result = numbers[0] + numbers[1] print(f'{numbers[0]} + {numbers[1]} = {result}')

渡した各値は、numbersオブジェクトを通してアクセスすることができます。ここでは、コマンドラインからの使用方法を説明します。

python click_example_2.py --numbers 1 2

クリックは、Pythonユーティリティのためのソリューションです。

このように、クリックは簡単に使えるのに、とてもパワフルです。これらの例は、クリックの基本的な機能を紹介したに過ぎませんが、基本的な機能の多くを習得した今、さらに学習を進めることができます。

PythonでArduinoを制御したり、GoogleワークシートをPythonで読み書きしたり、新しいスキルを磨くためのPythonプロジェクトをお探しなら、いかがでしょうか。この2つのプロジェクトのどちらかは、Clickに変換するのに最適なものでしょう

あなたが興味を持っているかもしれない記事

匿名者
匿名者

0 件の投稿

作家リスト

  1. admin 0 投稿
  2. 匿名者 0 投稿

おすすめ