"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > Python에서 명령줄 인터페이스(CLI) 익히기: 종합 안내서

Python에서 명령줄 인터페이스(CLI) 익히기: 종합 안내서

2024-11-08에 게시됨
검색:633

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. 클릭: 복잡한 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. 선택: 선택 매개변수를 사용하여 입력을 특정 값으로 제한합니다.
  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은 명령줄 인터페이스를 생성하기 위한 고급 라이브러리입니다. 명령, 하위 명령 및 옵션을 정의하는 데코레이터 기반 접근 방식을 제공합니다.

클릭을 사용하는 이유는 무엇입니까?

  • 더 나은 가독성: 더욱 파이썬적인 데코레이터 기반 구문입니다.
  • 자동 인수 유효성 검사: 인수가 올바르게 유효성 검사되는지 확인합니다.
  • 재사용 가능한 구성 요소: 명령, 옵션 및 인수는 애플리케이션의 여러 부분에서 쉽게 재사용할 수 있습니다.

클릭을 사용한 기본 예:

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를 결합하거나 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 .

이제 전 세계적으로 Greeting 명령을 사용할 수 있습니다.

$ greet --name Alice
Hello, Alice!

PyPI에 배포

도구를 공개적으로 배포하려면 PyPI 계정을 만들고 다음 단계에 따라 패키지를 업로드하세요.

  1. 패키지를 빌드합니다.
   python setup.py sdist bdist_wheel
  1. 패키지 업로드:
   twine upload dist/*

CLI 구축 모범 사례

  1. 명확한 도움말 메시지 제공: 항상 사용자를 안내하는 도움말을 포함합니다.
  2. 입력 유효성 검사: 유형 검사를 사용하고 예외를 적절하게 처리합니다.
  3. 직관적인 명령 디자인: 명령 구조가 논리적이고 사용하기 쉬운지 확인하세요.
  4. 특수 사례로 테스트: 유효하지 않은 입력이 있어도 CLI 도구가 올바르게 작동하는지 확인하세요.
  5. 코드 모듈화: 더 쉽게 테스트하고 유지 관리할 수 있도록 명령줄 로직을 핵심 기능과 분리하세요.

결론

Python은 명령줄 인터페이스(CLI) 애플리케이션을 구축하기 위한 탁월한 도구 키트를 제공합니다. 내장된 argparse 모듈을 사용하든, 기능이 더 풍부한 클릭을 사용하든 워크플로우를 자동화하고 데이터를 처리하며 생산성을 향상시킬 수 있는 강력하고 사용자 친화적인 도구를 만들 수 있습니다.

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