터미널 애플리케이션에 생기를 불어넣는 Python 도구들: survey, glow, rich, textwrap

카테고리

프로그래밍/소프트웨어 개발

서브카테고리

앱 개발, 개발 툴

대상자

CLI 애플리케이션 개발자

  • 중급~고급 Python 개발자
  • 터미널 애플리케이션의 UI/UX 개선에 관심 있는 개발자

핵심 요약

  • pyfiglet를 사용해 ASCII 아트 배너 생성 가능 (예: pyfiglet.figlet_format("Your App Name"))
  • survey 라이브러리로 CLI 상호작용 요소 (정렬 가능한 메뉴, 비밀번호 마스킹) 추가 가능
  • glow로 Markdown 문서를 터미널 내부에서 렌더링 (예: os.system('glow "file.md"'))
  • textwrap 모듈로 터미널 내 텍스트 줄 끊기 (예: textwrap.fill(text, width=80))
  • rich 라이브러리로 고급 터미널 스타일링 및 레이아웃 구현 가능

섹션별 세부 요약

1. ASCII 아트 생성: `pyfiglet`

  • pyfiglet 라이브러리로 텍스트를 ASCII 아트로 변환 가능
  • figlet_format() 함수로 폰트 스타일 조정 (예: font="slant")
  • asciiart.eu 활용해 이미지 → ASCII 아트 변환 가능
  • 예시 코드:

```python

import pyfiglet

ascii_banner = pyfiglet.figlet_format("Your App Name")

print(ascii_banner)

```

2. CLI 상호작용 개선: `survey`

  • survey 라이브러리로 정렬 가능한 메뉴, 필터링 기능, 비밀번호 마스킹 지원
  • 공식 문서에서 다양한 기능 확인 가능
  • 예시:

```python

from survey import Survey

survey = Survey()

survey.add_question("What is your favorite color?", options=["Red", "Blue", "Green"])

survey.run()

```

3. Markdown 렌더링: `glow`

  • 터미널 내부에서 Markdown 문서를 실시간으로 렌더링
  • 설치 방법:

```bash

pacman -S glow # Arch 기반 시스템

```

  • Python 애플리케이션에 통합:

```python

import os

os.system(f'glow "{file_with_markdown_to_display}"')

```

4. 텍스트 줄 끊기: `textwrap`

  • textwrap.fill() 함수로 터미널 내 텍스트 줄 끊기 및 가독성 향상
  • 표준 라이브러리로 별도 설치 필요 없음
  • 예시:

```python

import textwrap

wrapped_text = textwrap.fill("This is a long string...", width=80)

print(wrapped_text)

```

5. 고급 터미널 스타일링: `rich`

  • 터미널 내 텍스트, 테이블, 프로그레스 바 등 다양한 UI 요소 지원
  • 공식 문서의 cheat sheet 참고하여 기능 활용
  • 예시:

```python

from rich import print

print("[bold red]Error:[/bold red] Something went wrong!")

```

6. 실전 예시: `cj` CLI 애플리케이션

  • Gemini AI 챗봇과 상호작용하는 CLI 애플리케이션 개발
  • glow, survey, os.system('clear') 활용
  • 소스 코드: GitHub 저장소

결론

터미널 애플리케이션의 UI/UX를 향상시키기 위해 pyfiglet, survey, glow, textwrap, rich 등 다양한 도구를 조합 활용할 수 있음. 특히 rich는 고급 레이아웃 구현에 강력하며, 실전 예시인 cj CLI는 실제 구현 방법을 확인할 수 있는 좋은 참고 자료. 각 라이브러리의 공식 문서를 참고해 필요 기능만 선택적으로 활용하는 것이 효과적.