La mejor manera para poder automatizar tareas, instalaciones, copias de seguridad y mas creando un script menu en lenguaje Python. El mejor lenguaje hasta el momento para poder crear scripts en informatica.
Gracias a las distribuciones de GNU/Linux tenemos una gran variedad de sistemas operativos, donde es compatible instalar este lenguaje y de esta manera sera mas facil hacer pruebas, desde la comodidad de un hogar o zona de trabajo.
Requisitos para crear script menu en Python#
- Tener una terminal donde este ya instalado Python 3
- Actualizar los paquetes o el repositorio usando:
Terminal window sudo apt update && sudo apt upgrade -y - Editor de texto (nano, vim, VS Code, etc.)
Instalacion en diferentes sistemas#
Termux (Android):
pkg update && pkg upgrade -ypkg install pythonnano menu.pyLinux (Debian/Ubuntu):
sudo apt update && sudo apt upgrade -ysudo apt install python3 python3-pipnano menu.pyWindows:
- Descargar Python desde
python.org - Usar VS Code o cualquier editor
- Ejecutar desde PowerShell o CMD
Estructura avanzada del script menu#
1. Shebang y configuracion inicial#
#!/usr/bin/env python3# -*- coding: utf-8 -*-
"""Script Menu en Python 3Version: 2.0Autor: Tu NombreDescripcion: Menu interactivo para automatizacion de tareas"""2. Importacion de librerias#
import osimport sysimport timeimport subprocessimport platformfrom datetime import datetimefrom colorama import init, Fore, Back, Style
# Inicializar colorama para colores en consolainit(autoreset=True)3. Configuracion de colores#
# Colores para la consolaclass Colors: GREEN = Fore.GREEN RED = Fore.RED YELLOW = Fore.YELLOW BLUE = Fore.BLUE CYAN = Fore.CYAN MAGENTA = Fore.MAGENTA WHITE = Fore.WHITE RESET = Style.RESET_ALL BOLD = Style.BRIGHT4. Funcion para limpiar pantalla#
def clear_screen(): """Limpia la pantalla segun el sistema operativo""" if platform.system() == "Windows": os.system('cls') else: os.system('clear')5. Funcion para mostrar el menu#
def show_menu(): """Muestra el menu principal con colores y formato""" clear_screen() print(Colors.BOLD + Colors.CYAN + "=" * 60) print(Colors.BOLD + Colors.GREEN + " MENU PRINCIPAL PYTHON v2.0") print(Colors.BOLD + Colors.CYAN + "=" * 60) print("") print(Colors.YELLOW + " 1" + Colors.WHITE + " - Gestion de archivos") print(Colors.YELLOW + " 2" + Colors.WHITE + " - Informacion del sistema") print(Colors.YELLOW + " 3" + Colors.WHITE + " - Respaldo de archivos") print(Colors.YELLOW + " 4" + Colors.WHITE + " - Instalacion de paquetes") print(Colors.YELLOW + " 5" + Colors.WHITE + " - Monitoreo de red") print(Colors.YELLOW + " 6" + Colors.WHITE + " - Automatizacion de tareas") print(Colors.YELLOW + " 7" + Colors.WHITE + " - Gestion de procesos") print(Colors.YELLOW + " 8" + Colors.WHITE + " - Logs y depuracion") print(Colors.YELLOW + " 9" + Colors.WHITE + " - Configuracion del script") print(Colors.RED + " 0" + Colors.WHITE + " - Salir") print("") print(Colors.CYAN + "=" * 60) print(Colors.BOLD + Colors.GREEN + f" Fecha: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}") print(Colors.CYAN + "=" * 60)6. Funciones para cada opcion#
Gestion de archivos#
def file_management(): """Gestion basica de archivos y directorios""" clear_screen() print(Colors.BOLD + Colors.BLUE + "=== GESTION DE ARCHIVOS ===") print(Colors.CYAN + "-" * 40)
current_dir = os.getcwd() print(f"Directorio actual: {Colors.GREEN}{current_dir}")
print("\n1 - Listar archivos") print("2 - Crear directorio") print("3 - Eliminar archivo") print("4 - Mover archivo") print("5 - Copiar archivo") print("0 - Volver al menu principal")
option = input(f"\n{Colors.YELLOW}Selecciona una opcion: {Colors.WHITE}")
if option == "1": files = os.listdir() print(f"\n{Colors.CYAN}Archivos y directorios:") for file in files: if os.path.isdir(file): print(f"📁 {Colors.BLUE}{file}") else: print(f"📄 {Colors.WHITE}{file}") elif option == "2": dir_name = input("Nombre del directorio: ") try: os.mkdir(dir_name) print(f"{Colors.GREEN}Directorio '{dir_name}' creado correctamente") except FileExistsError: print(f"{Colors.RED}El directorio ya existe") except Exception as e: print(f"{Colors.RED}Error: {e}") elif option == "3": file_name = input("Nombre del archivo a eliminar: ") try: if os.path.exists(file_name): confirm = input(f"¿Eliminar '{file_name}'? (s/n): ") if confirm.lower() == 's': os.remove(file_name) print(f"{Colors.GREEN}Archivo eliminado correctamente") else: print(f"{Colors.RED}El archivo no existe") except Exception as e: print(f"{Colors.RED}Error: {e}") elif option == "4": source = input("Archivo origen: ") destination = input("Archivo destino: ") try: if os.path.exists(source): os.rename(source, destination) print(f"{Colors.GREEN}Archivo movido correctamente") else: print(f"{Colors.RED}El archivo origen no existe") except Exception as e: print(f"{Colors.RED}Error: {e}") elif option == "5": source = input("Archivo origen: ") destination = input("Archivo destino: ") try: if os.path.exists(source): import shutil shutil.copy2(source, destination) print(f"{Colors.GREEN}Archivo copiado correctamente") else: print(f"{Colors.RED}El archivo origen no existe") except Exception as e: print(f"{Colors.RED}Error: {e}")
input(f"\n{Colors.YELLOW}Presiona Enter para continuar...")Informacion del sistema#
def system_info(): """Muestra informacion detallada del sistema""" clear_screen() print(Colors.BOLD + Colors.BLUE + "=== INFORMACION DEL SISTEMA ===") print(Colors.CYAN + "-" * 40)
print(f"{Colors.GREEN}Sistema operativo: {platform.system()}") print(f"{Colors.GREEN}Version: {platform.version()}") print(f"{Colors.GREEN}Arquitectura: {platform.machine()}") print(f"{Colors.GREEN}Procesador: {platform.processor()}") print(f"{Colors.GREEN}Hostname: {platform.node()}") print(f"{Colors.GREEN}Python version: {sys.version}")
if platform.system() != "Windows": try: # Informacion de memoria result = subprocess.run(['free', '-h'], capture_output=True, text=True) print(f"\n{Colors.CYAN}--- Memoria ---") print(result.stdout)
# Informacion de CPU result = subprocess.run(['nproc'], capture_output=True, text=True) print(f"{Colors.CYAN}Nucleos de CPU: {result.stdout.strip()}")
# Espacio en disco result = subprocess.run(['df', '-h', '/'], capture_output=True, text=True) print(f"\n{Colors.CYAN}--- Espacio en disco ---") print(result.stdout) except: pass
input(f"\n{Colors.YELLOW}Presiona Enter para continuar...")Respaldo de archivos#
def backup_files(): """Realiza copias de seguridad de archivos""" clear_screen() print(Colors.BOLD + Colors.BLUE + "=== RESPALDO DE ARCHIVOS ===") print(Colors.CYAN + "-" * 40)
source = input("Directorio origen (./ para actual): ") destination = input("Directorio destino (./backup): ")
if destination == "": destination = "./backup"
try: import shutil from datetime import datetime
# Crear carpeta de backup con timestamp timestamp = datetime.now().strftime("%Y%m%d_%H%M%S") backup_dir = f"{destination}_{timestamp}"
print(f"\n{Colors.YELLOW}Creando respaldo en: {backup_dir}")
if os.path.exists(source): shutil.copytree(source, backup_dir) print(f"{Colors.GREEN}Respaldo completado exitosamente") print(f"{Colors.GREEN}Archivos respaldados: {len(os.listdir(backup_dir))}") else: print(f"{Colors.RED}El directorio origen no existe") except FileExistsError: print(f"{Colors.RED}El directorio de respaldo ya existe") except Exception as e: print(f"{Colors.RED}Error: {e}")
input(f"\n{Colors.YELLOW}Presiona Enter para continuar...")Instalacion de paquetes#
def install_packages(): """Instala paquetes desde diferentes gestores""" clear_screen() print(Colors.BOLD + Colors.BLUE + "=== INSTALACION DE PAQUETES ===") print(Colors.CYAN + "-" * 40)
print("1 - Instalar paquete con pip (Python)") print("2 - Instalar paquete con apt (Linux)") print("3 - Ver paquetes instalados") print("4 - Actualizar paquetes") print("0 - Volver")
option = input(f"\n{Colors.YELLOW}Selecciona una opcion: {Colors.WHITE}")
if option == "1": package = input("Nombre del paquete Python: ") try: subprocess.run([sys.executable, '-m', 'pip', 'install', package], check=True) print(f"{Colors.GREEN}Paquete '{package}' instalado correctamente") except subprocess.CalledProcessError: print(f"{Colors.RED}Error al instalar el paquete") elif option == "2" and platform.system() != "Windows": package = input("Nombre del paquete: ") try: subprocess.run(['sudo', 'apt', 'install', '-y', package], check=True) print(f"{Colors.GREEN}Paquete '{package}' instalado correctamente") except subprocess.CalledProcessError: print(f"{Colors.RED}Error al instalar el paquete") elif option == "3": result = subprocess.run([sys.executable, '-m', 'pip', 'list'], capture_output=True, text=True) print(f"\n{Colors.CYAN}{result.stdout}") elif option == "4": try: subprocess.run([sys.executable, '-m', 'pip', 'install', '--upgrade', 'pip'], check=True) print(f"{Colors.GREEN}Pip actualizado correctamente") except: print(f"{Colors.RED}Error al actualizar pip")
input(f"\n{Colors.YELLOW}Presiona Enter para continuar...")Monitoreo de red#
def network_monitor(): """Monitorea el estado de la red""" clear_screen() print(Colors.BOLD + Colors.BLUE + "=== MONITOREO DE RED ===") print(Colors.CYAN + "-" * 40)
if platform.system() != "Windows": try: # Ping a google result = subprocess.run(['ping', '-c', '4', 'google.com'], capture_output=True, text=True) print(f"{Colors.CYAN}--- Ping a Google ---") print(result.stdout)
# Mostrar interfaces de red result = subprocess.run(['ip', 'addr'], capture_output=True, text=True) print(f"\n{Colors.CYAN}--- Interfaces de red ---") print(result.stdout)
except: print(f"{Colors.RED}Error al ejecutar comandos de red") else: try: result = subprocess.run(['ping', '-n', '4', 'google.com'], capture_output=True, text=True) print(f"{Colors.CYAN}--- Ping a Google ---") print(result.stdout) except: print(f"{Colors.RED}Error al ejecutar ping")
input(f"\n{Colors.YELLOW}Presiona Enter para continuar...")Automatizacion de tareas#
def task_scheduler(): """Programa tareas automaticas""" clear_screen() print(Colors.BOLD + Colors.BLUE + "=== AUTOMATIZACION DE TAREAS ===") print(Colors.CYAN + "-" * 40)
print("1 - Ejecutar comando personalizado") print("2 - Crear tarea programada") print("3 - Ver tareas activas") print("0 - Volver")
option = input(f"\n{Colors.YELLOW}Selecciona una opcion: {Colors.WHITE}")
if option == "1": command = input("Comando a ejecutar: ") try: result = subprocess.run(command, shell=True, capture_output=True, text=True) print(f"\n{Colors.CYAN}Resultado:") print(result.stdout) if result.stderr: print(f"{Colors.RED}Errores:") print(result.stderr) except Exception as e: print(f"{Colors.RED}Error: {e}") elif option == "2" and platform.system() != "Windows": task = input("Tarea a programar (ej: 'echo Hola > /tmp/test.txt'): ") time_str = input("Tiempo en minutos para ejecutar: ") try: minutes = int(time_str) print(f"{Colors.YELLOW}Tarea programada en {minutes} minutos...") time.sleep(minutes * 60) subprocess.run(task, shell=True) print(f"{Colors.GREEN}Tarea ejecutada correctamente") except ValueError: print(f"{Colors.RED}Tiempo invalido") except KeyboardInterrupt: print(f"{Colors.YELLOW}Tarea cancelada") except Exception as e: print(f"{Colors.RED}Error: {e}")
input(f"\n{Colors.YELLOW}Presiona Enter para continuar...")7. Funcion principal del menu#
def main(): """Funcion principal del script""" while True: show_menu() option = input(f"{Colors.YELLOW}Selecciona una opcion (0-9): {Colors.WHITE}")
if option == "1": file_management() elif option == "2": system_info() elif option == "3": backup_files() elif option == "4": install_packages() elif option == "5": network_monitor() elif option == "6": task_scheduler() elif option == "7": # Gestion de procesos clear_screen() print(Colors.BOLD + Colors.BLUE + "=== GESTION DE PROCESOS ===") print(Colors.CYAN + "-" * 40) if platform.system() != "Windows": result = subprocess.run(['ps', 'aux'], capture_output=True, text=True) print(result.stdout[:2000]) # Limitar salida else: result = subprocess.run(['tasklist'], capture_output=True, text=True) print(result.stdout[:2000]) input(f"\n{Colors.YELLOW}Presiona Enter para continuar...") elif option == "8": # Logs y depuracion clear_screen() print(Colors.BOLD + Colors.BLUE + "=== LOGS Y DEPURACION ===") print(Colors.CYAN + "-" * 40) print("1 - Ver log del sistema") print("2 - Crear archivo de log") print("3 - Limpiar logs")
log_option = input(f"\n{Colors.YELLOW}Selecciona una opcion: {Colors.WHITE}")
if log_option == "1": try: with open('/var/log/syslog', 'r') as f: lines = f.readlines()[-20:] # Ultimas 20 lineas print(f"\n{Colors.CYAN}{''.join(lines)}") except: print(f"{Colors.RED}No se puede leer el log del sistema") elif log_option == "2": log_file = f"log_{datetime.now().strftime('%Y%m%d')}.txt" with open(log_file, 'w') as f: f.write(f"Log generado: {datetime.now()}\n") f.write("Script menu Python v2.0\n") print(f"{Colors.GREEN}Log creado: {log_file}")
input(f"\n{Colors.YELLOW}Presiona Enter para continuar...") elif option == "9": # Configuracion del script clear_screen() print(Colors.BOLD + Colors.BLUE + "=== CONFIGURACION ===") print(Colors.CYAN + "-" * 40) print(f"{Colors.GREEN}Script: menu.py") print(f"{Colors.GREEN}Version: 2.0") print(f"{Colors.GREEN}Python: {sys.version}") print(f"{Colors.GREEN}Directorio: {os.getcwd()}") print(f"\n{Colors.YELLOW}Opciones de configuracion:") print("1 - Cambiar directorio de trabajo") print("2 - Ver variables de entorno")
config_option = input(f"\n{Colors.YELLOW}Selecciona una opcion: {Colors.WHITE}")
if config_option == "1": new_dir = input("Nuevo directorio: ") try: os.chdir(new_dir) print(f"{Colors.GREEN}Directorio cambiado a: {os.getcwd()}") except: print(f"{Colors.RED}Error al cambiar directorio") elif config_option == "2": for key, value in os.environ.items(): print(f"{Colors.CYAN}{key}: {value[:50]}...")
input(f"\n{Colors.YELLOW}Presiona Enter para continuar...") elif option == "0": print(f"\n{Colors.GREEN}¡Hasta luego!") sys.exit(0) else: print(f"\n{Colors.RED}Opcion no valida. Intenta de nuevo.") time.sleep(2)8. Punto de entrada#
if __name__ == "__main__": try: main() except KeyboardInterrupt: print(f"\n{Colors.YELLOW}Script interrumpido por el usuario") sys.exit(0) except Exception as e: print(f"\n{Colors.RED}Error fatal: {e}") sys.exit(1)Codigo completo#
Puedes descargar el codigo completo desde el siguiente enlace:
GitHub: menupy
Explicacion de mejoras avanzadas#
Estructura modular#
El codigo esta organizado en funciones independientes, lo que facilita el mantenimiento y la escalabilidad. Cada funcion tiene una responsabilidad unica y puede ser modificada sin afectar al resto del sistema.
Manejo de errores robusto#
Se utilizan bloques try-except para capturar y manejar errores de manera elegante, evitando que el script se detenga abruptamente.
Compatibilidad multiplataforma#
El script detecta automaticamente el sistema operativo y adapta los comandos y comportamientos segun sea necesario.
Colores y formato#
Se utiliza la libreria colorama para agregar colores y formato a la salida en consola, mejorando la experiencia de usuario.
Funcionalidades avanzadas#
- Gestion de archivos (crear, eliminar, mover, copiar)
- Informacion detallada del sistema
- Respaldo automatico con timestamp
- Instalacion de paquetes
- Monitoreo de red
- Programacion de tareas
- Logs y depuracion
Requisitos adicionales#
Para ejecutar este script necesitas instalar la libreria colorama:
pip install coloramaComo ejecutar el script#
python3 menu.pyO hacerlo ejecutable:
chmod +x menu.py./menu.pyConclusion#
Este script menu en Python 3 es una herramienta versatil y potente para automatizar tareas en diferentes sistemas operativos. Con su estructura modular y manejo de errores robusto, es ideal tanto para principiantes como para usuarios avanzados.
Recomendaciones finales#
- Personaliza las funciones: Adapta el codigo a tus necesidades especificas.
- Agrega nuevas funcionalidades: El script esta diseñado para ser facilmente extensible.
- Mantén el codigo actualizado: Revisa y mejora el script periodicamente.
- Usa version control: Guarda los cambios en un repositorio Git.
Reflexion final#
Python es un lenguaje increiblemente versatil que permite crear herramientas poderosas en pocas lineas de codigo. Con este script menu, tienes la base para construir herramientas de automatizacion adaptadas a tus necesidades.
Nota: Este script es una herramienta educativa y de automatizacion. Utilizalo de manera responsable y respetando las politicas de los sistemas donde lo ejecutes.
