Absortio

Email → Summary → Bookmark → Email

GitHub - Termitty/termitty: The terminal automation framework

Extracto

The terminal automation framework. Contribute to Termitty/termitty development by creating an account on GitHub.

Resumen

Aquí tienes un resumen profesional y detallado de Termitty:

Resumen Principal

Termitty emerge como un potente framework de Python diseñado para la automatización de terminales y SSH, adoptando la elegancia y simplicidad de Selenium WebDriver. Su objetivo es transformar radicalmente la manera en que los desarrolladores interactúan programáticamente con las interfaces de línea de comandos, ofreciendo una experiencia sin precedentes en este ámbito. Se distingue por su API intuitiva tipo Selenium, que permite a los usuarios con experiencia en automatización web adaptarse rápidamente. Una de sus características más innovadoras es la emulación de terminal avanzada, que incluye soporte completo para códigos de escape ANSI y gestión de un buffer de pantalla virtual, posibilitando una interacción realista y detallada. Además, Termitty sobresale por su capacidad de grabación y reproducción de sesiones, shell interactivo para aplicaciones dinámicas, ejecución paralela en múltiples servidores y una preparación explícita para la integración con IA, lo que lo posiciona como una herramienta versátil y de vanguardia para la automatización de infraestructura. Su arquitectura modular garantiza flexibilidad y escalabilidad.

Elementos Clave

  • API Intuitiva tipo Selenium: Termitty ofrece una interfaz de programación que espejea los patrones familiares de Selenium WebDriver, permitiendo a los desarrolladores automatizar interacciones en la terminal con comandos como session.connect(), session.wait_until() y session.execute(). Esta familiaridad reduce significativamente la curva de aprendizaje para aquellos ya versados en la automatización web, facilitando la transición a entornos de línea de comandos y SSH.

  • Emulación de Terminal Avanzada: El framework proporciona una emulación de terminal completa con soporte para códigos de escape ANSI, un buffer de pantalla virtual y seguimiento en tiempo real del estado de la terminal. Esta capacidad es crucial para interactuar con aplicaciones basadas en texto, detectar elementos de la interfaz de usuario de la terminal (como menús) y garantizar que la automatización se adapte a las condiciones reales de la pantalla.

  • Grabación y Reproducción de Sesiones con Reproductor de UI Profesional: Termitty permite grabar sesiones de terminal completas a un archivo JSON, que luego puede ser reproducido utilizando el SessionPlayer. La versión v0.1.1 introduce un reproductor de grabación de clase mundial con una interfaz multipanel profesional, terminal de desplazamiento automático en tiempo real, velocidades variables, resaltado de sintaxis, navegación por marcadores y efectos de escritura animados, lo que mejora la depuración, demostración y análisis de flujos de trabajo automatizados.

  • Capacidades Interactivas y de Espera Inteligente: El framework sobresale en el manejo de aplicaciones interactivas mediante session.interactive_shell(), permitiendo enviar líneas (send_line) y teclas (send_keys, send_key) para navegar menús o responder a prompts de contraseña de forma segura. Complementa esto con espera inteligente (wait_until) para condiciones específicas como la aparición de texto (OutputContains), prompts listos (PromptReady) o patrones de expresiones regulares (OutputMatches), garantizando que la automatización se sincronice correctamente con la salida de la terminal.

Análisis e Implicaciones

Termitty tiene el potencial de revolucionar la automatización de operaciones (DevOps), la administración de sistemas y las pruebas de infraestructura, al proporcionar un control programático detallado sobre entornos de terminal complejos. Su diseño "AI-Ready"

Contenido

Termitty 🐜

A powerful, Selenium-inspired Python framework for terminal and SSH automation.

Python Version License: MIT Code style: black

What is Termitty?

Termitty brings the elegance and simplicity of Selenium WebDriver to the world of terminal automation. Just as Selenium revolutionized web browser automation, Termitty transforms how developers interact with command-line interfaces programmatically.

🆚 Quick Comparison

Feature Termitty Fabric Paramiko Pexpect Ansible
Selenium-like API
Terminal Emulation ✅ Full ⚠️ Basic
Session Recording
AI-Ready
Interactive Shell ⚠️ ⚠️

→ See detailed comparison for more information

✨ Key Features

🎯 Intuitive Selenium-like API

# Familiar patterns for developers who've used Selenium
session = TermittySession()
session.connect('server.com', username='user', key_file='~/.ssh/id_rsa')
session.wait_until(OutputContains('Ready'))

🖥️ Advanced Terminal Emulation

  • Full ANSI escape code support
  • Virtual terminal with screen buffer management
  • Real-time terminal state tracking
  • Menu and UI element detection

⏱️ Smart Waiting & Pattern Matching

# Wait for specific conditions
session.wait_until(OutputContains('Task completed'), timeout=30)
session.wait_until(PromptReady('$ '))
session.wait_until(OutputMatches(r'Status: \d+%'))

🔄 Interactive Shell Sessions

# Handle interactive applications with ease
with session.interactive_shell() as shell:
    shell.send_line('vim config.txt')
    shell.wait_for_text('INSERT')
    shell.send_keys('Hello World')
    shell.send_key(Keys.ESCAPE)
    shell.send_line(':wq')

📹 Session Recording & Playback

# Record your terminal sessions
session.start_recording('demo.json')
# ... perform actions ...
recording = session.stop_recording()

# Playback later
from termitty.recording import SessionPlayer
player = SessionPlayer('demo.json')
player.play(speed=2.0)

Parallel Execution

# Execute commands across multiple servers
hosts = ['server1.com', 'server2.com', 'server3.com']
pool = ConnectionPool(hosts, username='user', key_file='~/.ssh/id_rsa')

results = pool.execute_on_all('apt update && apt upgrade -y', 
                              strategy='rolling',
                              batch_size=2)

🎨 Terminal UI Navigation

# Navigate terminal UIs programmatically
menu_items = session.terminal.find_menu_items()
session.terminal.click_menu_item('Settings')

📦 Installation

# Core package (automation, recording, terminal emulation)
pip install termitty

# With UI support (includes beautiful terminal player)
pip install termitty[ui]

Installation Options:

  • termitty - Core functionality only (lightweight)
  • termitty[ui] - Includes rich terminal player with professional UI

🎬 NEW in v0.1.1: World-Class Recording Player

Experience terminal recordings like never before:

# Record a session
from termitty import TermittySession

with TermittySession() as session:
    session.connect('server.com', username='user', password='pass')
    session.start_recording('demo.json')
    session.execute('echo "Hello World!"')
    session.execute('date')
    session.stop_recording()
# Install with UI support and play back with the beautiful player
pip install termitty[ui]
python docs/terminal_player_ui.py demo.json --speed 1.0

Player Features:

  • 🎨 Professional multi-panel interface
  • 📊 Real-time auto-scrolling terminal
  • ⚡ Variable speeds (0.25× to 4×)
  • 🌈 Smart syntax highlighting
  • 🏷️ Marker navigation
  • ⌨️ Animated typing effects

🚀 Quick Start

Basic Command Execution

from termitty import TermittySession

# Connect to a server
session = TermittySession()
session.connect('example.com', username='user', password='pass')

# Execute commands
result = session.execute('ls -la')
print(result.output)

# Use context managers for directory changes
with session.cd('/var/log'):
    logs = session.execute('tail -n 20 syslog')
    print(logs.output)

Interactive Application Handling

# Handle password prompts
session.execute('sudo apt update')
session.wait_until(OutputContains('[sudo] password'))
session.send_line('password', secure=True)

# Navigate interactive installers
session.execute('./install.sh')
session.wait_until(OutputContains('Do you accept? [y/N]'))
session.send_line('y')

Terminal Emulation

# Access the virtual terminal through session state
terminal = session.state.terminal

# Get screen content
screen_text = terminal.get_screen_text()
print(screen_text)

# Find text on screen
if terminal.find_text('Error'):
    print("Error found at:", terminal.cursor_position)

# Take snapshots
snapshot = terminal.snapshot()

📚 Documentation

For comprehensive documentation, visit our docs folder or check out these guides:

🏗️ Architecture

Termitty is built with a modular architecture:

  • Session Layer: High-level API for SSH connections and command execution
  • Terminal Emulator: Full VT100/ANSI terminal emulation
  • Interactive Shell: Real-time interaction with persistent shell sessions
  • Recording System: Capture and replay terminal sessions
  • Parallel Executor: Efficient multi-host command execution

See our Architecture Documentation for detailed information.

🤝 Contributing

We welcome contributions! Please see our Contributing Guide for details.

📄 License

Termitty is licensed under the MIT License. See LICENSE for details.

🛣️ Roadmap

  • Async/await support for all operations
  • File transfer capabilities (SCP/SFTP)
  • Built-in task templates for common operations
  • Terminal session sharing and collaboration
  • Web-based session viewer
  • Plugin system for custom extensions

💡 Use Cases

  • DevOps Automation: Automate server provisioning and configuration
  • Testing: Create robust tests for CLI applications
  • Monitoring: Build intelligent monitoring scripts that react to terminal output
  • Documentation: Record terminal sessions for tutorials and documentation
  • Deployment: Orchestrate complex multi-server deployments
  • AI Agents: Enable LLMs and coding assistants to control terminals → Learn more

🙏 Acknowledgments

This project is inspired by the elegance of Selenium WebDriver and the need for better terminal automation tools in the DevOps/SRE space.


Ready to automate your terminal workflows? Check out our examples to get started!

Fuente: GitHub