「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > Python でコマンドライン インターフェイス (CLI) をマスターする: 包括的なガイド

Python でコマンドライン インターフェイス (CLI) をマスターする: 包括的なガイド

2024 年 11 月 8 日に公開
ブラウズ:815

Mastering Command-Line Interfaces (CLI) in Python: A Comprehensive Guide

導入

Python は、特にコマンドライン インターフェイス (CLI) アプリケーションを構築する場合、その多用途性と使いやすさで広く知られています。日常的なタスクを自動化したい場合でも、開発者ツールを構築したい場合でも、柔軟なスクリプトを作成したい場合でも、Python の豊富なエコシステムは CLI を効率的に処理するためのさまざまなライブラリを提供します。

このブログ投稿では、Python での CLI の操作について詳しく説明し、次の内容を取り上げます。

  • CLI を構築する理由
  • CLI を構築するための Python モジュール
  • コマンドライン引数の基本
  • argparse を使用した高度な機能
  • クリックによる CLI ツールの構築
  • CLI ツールでのエラー処理
  • 配布用の CLI ツールのパッケージ化

この投稿を終えるまでに、堅牢でユーザーフレンドリーなコマンドライン アプリケーションを作成する準備が整います。


CLI を構築する理由

CLI は次の機能を提供するため、システム管理、データ処理、ソフトウェア開発で広く使用されています。

  1. オートメーション: 繰り返しのタスクをスクリプト化して時間を節約し、エラーを減らします。
  2. シンプルさ: 数回のキーストロークで複雑なコマンドを実行します。
  3. 移植性: よく構築された CLI ツールは、GUI なしでどのマシンでも使用できます。
  4. 開発者ツール: 多くの開発ツール (git、npm、pip など) は CLI ベースです。

CLI 開発用の Python モジュール

Python は CLI ツールを構築するためのライブラリをいくつか提供しています:

  1. sys.argv: コマンドライン引数への直接アクセス。小規模で単純なスクリプトに適しています。
  2. argparse: 自動ヘルプ生成でコマンドライン引数を処理するための組み込みモジュール。
  3. click: 複雑な CLI アプリケーションを作成するための強力で柔軟なライブラリ。
  4. typer: クリックをベースに構築された最新のライブラリ。使いやすさのために Python の型ヒントを使用します。

sys.argv の操作

sys.argv は、コマンドライン引数にアクセスする基本的な方法です。コマンドライン引数をリストとして保存します。最初の要素は常にスクリプト名です。

import sys

# Command-line arguments
print(f"Script Name: {sys.argv[0]}")
print(f"Arguments: {sys.argv[1:]}")

スクリプトを実行しています:

$ python script.py arg1 arg2 arg3
Script Name: script.py
Arguments: ['arg1', 'arg2', 'arg3']

sys.argv:の制限事項

  • 型チェックなし: すべての入力は文字列として扱われます。
  • 組み込みのヘルプ メッセージなし: 手動で入力を検証し、使用状況情報を表示する必要があります。

argparse を使用した CLI の構築

argparse モジュールは、CLI を作成するための Python の標準ライブラリです。 sys.argv よりも詳細な制御が可能で、ヘルプ メッセージとエラー処理が自動的に生成されます。

基本的な例:

import argparse

parser = argparse.ArgumentParser(description="A simple CLI tool")
parser.add_argument("name", help="Your name")
parser.add_argument("--greet", help="Custom greeting", default="Hello")

args = parser.parse_args()

print(f"{args.greet}, {args.name}!")

スクリプトを実行しています:

$ python script.py Alice
Hello, Alice!

$ python script.py Alice --greet Hi
Hi, Alice!

argparse の主な機能:

  1. 位置引数とオプションの引数: 必須パラメータとオプションのパラメータを簡単に定義します。
  2. 型チェック: ユーザーが正しいデータ型を指定していることを確認します。
  3. Choices: Choices パラメーターを使用して、入力を特定の値に制限します。
  4. ヘルプ メッセージ: -h または --help フラグを使用してヘルプを自動的に生成します。

型チェックと選択肢の例:

parser.add_argument("age", type=int, help="Your age")
parser.add_argument("--format", choices=["json", "xml"], help="Output format")

スクリプトを実行しています:

$ python script.py Alice 30 --format json

クリックによる高度な CLI ツール

click は、コマンドライン インターフェイスを作成するためのより高度なライブラリです。コマンド、サブコマンド、オプションを定義するためのデコレータベースのアプローチを提供します。

クリックを使用する理由

  • 可読性の向上: より Python 的な、デコレータベースの構文。
  • 自動引数検証: 引数が適切に検証されていることを確認します。
  • 再利用可能なコンポーネント: コマンド、オプション、引数は、アプリケーションのさまざまな部分で簡単に再利用できます。

click を使用した基本的な例:

import click

@click.command()
@click.option('--name', prompt='Your name', help='The person to greet.')
@click.option('--greet', default="Hello", help='Greeting to use.')
def greet(name, greet):
    """Simple program that greets NAME with a GREET."""
    click.echo(f'{greet}, {name}!')

if __name__ == '__main__':
    greet()

スクリプトを実行しています:

$ python greet.py --name Alice --greet Hi
Hi, Alice!

クリックによるサブコマンド:

複数のサブコマンドを使用して、より複雑な CLI ツールを作成できます。

import click

@click.group()
def cli():
    pass

@cli.command()
def start():
    click.echo("Starting the application...")

@cli.command()
def stop():
    click.echo("Stopping the application...")

if __name__ == '__main__':
    cli()

スクリプトを実行しています:

$ python app.py start
Starting the application...

$ python app.py stop
Stopping the application...

CLI ツールでのエラー処理

どのライブラリを使用する場合でも、エラー処理はスムーズなユーザー エクスペリエンスを提供するために非常に重要です。

argparse の例:

必要な引数が欠落している場合、argparse はエラーをスローし、使用方法の説明を表示します:

$ python script.py
usage: script.py [-h] name
script.py: error: the following arguments are required: name

クリック時のエラー処理:

クリックでは、カスタム例外を発生させ、デコレータを使用してエラーを適切に処理できます。

@click.command()
@click.option('--count', type=int, help='Number of repetitions')
def repeat(count):
    if count is None or count 





argparse と click を他のライブラリと組み合わせる

CLI 機能を拡張するには、argparse または click を、OS、サブプロセス、さらにはカスタム ライブラリなどの他のライブラリと組み合わせることができます。

例: argparse と os の組み合わせ

import os
import argparse

parser = argparse.ArgumentParser(description="File operations CLI")
parser.add_argument("filename", help="Name of the file to check")
parser.add_argument("--create", action="store_true", help="Create the file if it does not exist")

args = parser.parse_args()

if os.path.exists(args.filename):
    print(f"{args.filename} already exists.")
else:
    if args.create:
        with open(args.filename, 'w') as f:
            f.write("New file created.")
        print(f"{args.filename} created.")
    else:
        print(f"{args.filename} does not exist.")

スクリプトを実行しています:

$ python filecli.py example.txt --create
example.txt created.

CLI ツールのパッケージ化

CLI ツールを配布するには、setuptools を使用してパッケージ化し、どのシステムからでもグローバルにアクセスできるようにします。

ステップ 1: setup.py ファイルを作成する

from setuptools import setup

setup(
    name='greet-cli',
    version='0.1',
    py_modules=['greet'],
    install_requires=[
        'click',
    ],
    entry_points='''
        [console_scripts]
        greet=greet:greet
    ''',
)

ステップ 2: CLI をローカルにインストールする

$ pip install --editable .

これで、greet コマンドがグローバルに使用できるようになりました:

$ greet --name Alice
Hello, Alice!

PyPI で配布

ツールを一般に配布するには、PyPI アカウントを作成し、手順に従ってパッケージをアップロードします。

  1. パッケージをビルドします:
   python setup.py sdist bdist_wheel
  1. パッケージをアップロードします:
   twine upload dist/*

CLI 構築のベスト プラクティス

  1. 明確なヘルプ メッセージを提供する: ユーザーをガイドするために、常に --help を含めます。
  2. 入力の検証: 型チェックを使用し、例外を適切に処理します。
  3. 直感的なコマンドを設計する: コマンド構造が論理的で使いやすいものであることを確認してください。
  4. エッジ ケースでのテスト: 無効な入力でも CLI ツールが正しく動作することを確認します。
  5. コードをモジュール化する: テストとメンテナンスを容易にするために、コマンドライン ロジックをコア機能から分離しておきます。

結論

Python は、コマンドライン インターフェイス (CLI) アプリケーションを構築するための優れたツールキットを提供します。組み込みの argparse モジュールを使用している場合でも、より機能が豊富な click を使用している場合でも、ワークフローを自動化し、データを処理し、生産性を向上させる強力で使いやすいツールを作成できます。

Python で CLI を操作する基本と高度な機能を学習したので、今度はそれを実践してみましょう。独自のツールを構築し、共有したり、世界中に配布したりできます!


ご質問やご提案がありましたら、お気軽にお問い合わせください:

  • リンクトイン
  • GitHub
リリースステートメント この記事は次の場所に転載されています: https://dev.to/usooldatascience/mastering-command-line-interfaces-cli-in-python-a-comprehensive-guide-10bc?1 侵害がある場合は、study_golang@163 までご連絡ください。 .comを削除してください
最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3