- Se incorporó
- 17 Marzo 2005
- Mensajes
- 28.650
Demasiado desorden en el administrador de programas me tiene loco.
Muestra demasiadas cosas y no permite ordenarlo.
Además que hay probramas que usan módulos o cosas así que l instalador del windows lo muestra como si fueran programas independientes, lo que es más desorden aún.
Por ejemplo:
Medio kilombo.
Debería poder ponerse, por ejemplo, todo lo Microsoft en una carpeta, todo lo de native Instruments en otra...y así.
Por cierto, estoy en Windows 11 pero uso el panel de control antiguo. El nuevo se demora varios minutos en abrir y aún no tengo idea por qué pasa eso, pero va para otro tema.
Muestra demasiadas cosas y no permite ordenarlo.
Además que hay probramas que usan módulos o cosas así que l instalador del windows lo muestra como si fueran programas independientes, lo que es más desorden aún.
Por ejemplo:
Medio kilombo.
Debería poder ponerse, por ejemplo, todo lo Microsoft en una carpeta, todo lo de native Instruments en otra...y así.
Por cierto, estoy en Windows 11 pero uso el panel de control antiguo. El nuevo se demora varios minutos en abrir y aún no tengo idea por qué pasa eso, pero va para otro tema.
Le pregunté a Copilot y pasó esto:
Yo:
Necesito un programa que administre la instalación y desisntalación de programas permitiendo ordenarlos por carpetas.
Copilot:
A continuación te presento un ejemplo de programa en Python que cumple con la función de administrar la instalación y desinstalación de programas, organizándolos en "carpetas" o categorías. Este ejemplo simula (con comandos de impresión) la ejecución de órdenes reales para instalar o desinstalar, de modo que la idea principal es estructurar la información en categorías (carpetas) y permitir la selección del programa deseado para proceder con la acción.
> Nota: > - El código usa comandos de ejemplo (como sudo apt install ...), propios de entornos Linux/Debian. > - Para usar comandos reales, deberás asegurarte de tener los permisos necesarios y adaptar los comandos al sistema operativo que estés usando (por ejemplo, en Windows o macOS). > - Se incluye manejo básico de errores y selección interactiva vía terminal.
Puedes usar este código como punto de partida y adaptarlo a tus necesidades específicas.
python
#!/usr/bin/env python3
import subprocess
# Diccionario con las "carpetas" (categorías) y los programas asociados.
programs = {
"Oficina": [
{"name": "LibreOffice", "install_cmd": "sudo apt install libreoffice", "uninstall_cmd": "sudo apt remove libreoffice"},
{"name": "OnlyOffice", "install_cmd": "sudo apt install onlyoffice", "uninstall_cmd": "sudo apt remove onlyoffice"}
],
"Edición": [
{"name": "GIMP", "install_cmd": "sudo apt install gimp", "uninstall_cmd": "sudo apt remove gimp"},
{"name": "Inkscape", "install_cmd": "sudo apt install inkscape", "uninstall_cmd": "sudo apt remove inkscape"}
],
"Herramientas": [
{"name": "Git", "install_cmd": "sudo apt install git", "uninstall_cmd": "sudo apt remove git"}
]
}
def list_programs():
print("\n-------------------------------")
print("Programas disponibles:")
for category, apps in programs.items():
print(f"\nCarpeta: {category}")
for index, app in enumerate(apps, start=1):
print(f" {index}. {app['name']}")
print("-------------------------------")
def select_category():
categories = list(programs.keys())
print("\nSelecciona una carpeta:")
for idx, cat in enumerate(categories, start=1):
print(f" {idx}. {cat}")
try:
choice = int(input("Ingresa el número de la carpeta: ")) - 1
if 0 <= choice < len(categories):
return categories[choice]
else:
print("Opción no válida.")
return None
except ValueError:
print("Entrada no válida.")
return None
def select_program(category):
apps = programs[category]
print(f"\nSelecciona un programa de la carpeta {category}:")
for idx, app in enumerate(apps, start=1):
print(f" {idx}. {app['name']}")
try:
choice = int(input("Ingresa el número del programa: ")) - 1
if 0 <= choice < len(apps):
return apps[choice]
else:
print("Opción no válida.")
return None
except ValueError:
print("Entrada no válida.")
return None
def install_program(app):
print(f"\nInstalando {app['name']}...")
try:
# En una implementación real se podría llamar:
# subprocess.run(app["install_cmd"], shell=True, check=True)
print(f"Ejecutando comando: {app['install_cmd']}")
print(f"{app['name']} instalado exitosamente.")
except Exception as e:
print(f"Error instalando {app['name']}: {e}")
def uninstall_program(app):
print(f"\nDesinstalando {app['name']}...")
try:
# En una implementación real se podría llamar:
# subprocess.run(app["uninstall_cmd"], shell=True, check=True)
print(f"Ejecutando comando: {app['uninstall_cmd']}")
print(f"{app['name']} desinstalado exitosamente.")
except Exception as e:
print(f"Error desinstalando {app['name']}: {e}")
def main():
while True:
print("\n=== Gestor de Programas ===")
print("1. Listar programas")
print("2. Instalar un programa")
print("3. Desinstalar un programa")
print("4. Salir")
op = input("Elige una opción: ")
if op == '1':
list_programs()
elif op == '2':
cat = select_category()
if cat:
app = select_program(cat)
if app:
install_program(app)
elif op == '3':
cat = select_category()
if cat:
app = select_program(cat)
if app:
uninstall_program(app)
elif op == '4':
print("Saliendo del programa...")
break
else:
print("Opción no reconocida. Intenta nuevamente.")
if __name__ == "__main__":
main()
Yo:
Necesito un programa que administre la instalación y desisntalación de programas permitiendo ordenarlos por carpetas.
Copilot:
A continuación te presento un ejemplo de programa en Python que cumple con la función de administrar la instalación y desinstalación de programas, organizándolos en "carpetas" o categorías. Este ejemplo simula (con comandos de impresión) la ejecución de órdenes reales para instalar o desinstalar, de modo que la idea principal es estructurar la información en categorías (carpetas) y permitir la selección del programa deseado para proceder con la acción.
> Nota: > - El código usa comandos de ejemplo (como sudo apt install ...), propios de entornos Linux/Debian. > - Para usar comandos reales, deberás asegurarte de tener los permisos necesarios y adaptar los comandos al sistema operativo que estés usando (por ejemplo, en Windows o macOS). > - Se incluye manejo básico de errores y selección interactiva vía terminal.
Puedes usar este código como punto de partida y adaptarlo a tus necesidades específicas.
python
#!/usr/bin/env python3
import subprocess
# Diccionario con las "carpetas" (categorías) y los programas asociados.
programs = {
"Oficina": [
{"name": "LibreOffice", "install_cmd": "sudo apt install libreoffice", "uninstall_cmd": "sudo apt remove libreoffice"},
{"name": "OnlyOffice", "install_cmd": "sudo apt install onlyoffice", "uninstall_cmd": "sudo apt remove onlyoffice"}
],
"Edición": [
{"name": "GIMP", "install_cmd": "sudo apt install gimp", "uninstall_cmd": "sudo apt remove gimp"},
{"name": "Inkscape", "install_cmd": "sudo apt install inkscape", "uninstall_cmd": "sudo apt remove inkscape"}
],
"Herramientas": [
{"name": "Git", "install_cmd": "sudo apt install git", "uninstall_cmd": "sudo apt remove git"}
]
}
def list_programs():
print("\n-------------------------------")
print("Programas disponibles:")
for category, apps in programs.items():
print(f"\nCarpeta: {category}")
for index, app in enumerate(apps, start=1):
print(f" {index}. {app['name']}")
print("-------------------------------")
def select_category():
categories = list(programs.keys())
print("\nSelecciona una carpeta:")
for idx, cat in enumerate(categories, start=1):
print(f" {idx}. {cat}")
try:
choice = int(input("Ingresa el número de la carpeta: ")) - 1
if 0 <= choice < len(categories):
return categories[choice]
else:
print("Opción no válida.")
return None
except ValueError:
print("Entrada no válida.")
return None
def select_program(category):
apps = programs[category]
print(f"\nSelecciona un programa de la carpeta {category}:")
for idx, app in enumerate(apps, start=1):
print(f" {idx}. {app['name']}")
try:
choice = int(input("Ingresa el número del programa: ")) - 1
if 0 <= choice < len(apps):
return apps[choice]
else:
print("Opción no válida.")
return None
except ValueError:
print("Entrada no válida.")
return None
def install_program(app):
print(f"\nInstalando {app['name']}...")
try:
# En una implementación real se podría llamar:
# subprocess.run(app["install_cmd"], shell=True, check=True)
print(f"Ejecutando comando: {app['install_cmd']}")
print(f"{app['name']} instalado exitosamente.")
except Exception as e:
print(f"Error instalando {app['name']}: {e}")
def uninstall_program(app):
print(f"\nDesinstalando {app['name']}...")
try:
# En una implementación real se podría llamar:
# subprocess.run(app["uninstall_cmd"], shell=True, check=True)
print(f"Ejecutando comando: {app['uninstall_cmd']}")
print(f"{app['name']} desinstalado exitosamente.")
except Exception as e:
print(f"Error desinstalando {app['name']}: {e}")
def main():
while True:
print("\n=== Gestor de Programas ===")
print("1. Listar programas")
print("2. Instalar un programa")
print("3. Desinstalar un programa")
print("4. Salir")
op = input("Elige una opción: ")
if op == '1':
list_programs()
elif op == '2':
cat = select_category()
if cat:
app = select_program(cat)
if app:
install_program(app)
elif op == '3':
cat = select_category()
if cat:
app = select_program(cat)
if app:
uninstall_program(app)
elif op == '4':
print("Saliendo del programa...")
break
else:
print("Opción no reconocida. Intenta nuevamente.")
if __name__ == "__main__":
main()
Explicación y detalles del código
- Estructura de datos: Se utiliza un diccionario llamado
programs
en el que las claves representan las carpetas (por ejemplo, "Oficina", "Edición" y "Herramientas") y cada una contiene una lista de diccionarios con información del programa (nombre, comando de instalación y comando de desinstalación). - Funciones de utilidad:
list_programs()
: Lista todos los programas organizados por carpeta para dar una visión general.select_category()
: Permite al usuario elegir la carpeta/categoría de interés.select_program(category)
: Después de elegir la categoría, el usuario selecciona un programa en esa carpeta.install_program(app)
yuninstall_program(app)
: Simulan la ejecución de los comandos correspondientes. En una implementación real, podrías descomentar la línea desubprocess.run(...)
para ejecutar el comando.
- Menú principal interactivo: El ciclo
while
enmain()
muestra un menú simple para listar, instalar, desinstalar o salir del programa. Esto permite al usuario navegar de forma interactiva por las opciones.
Ideas adicionales para profundizar
- Interfaz gráfica: Podrías utilizar bibliotecas como Tkinter, PyQt o Kivy para crear una interfaz más amigable, en la que las carpetas aparezcan en un árbol de navegación y las acciones se realicen con botones en lugar de ingresar números en consola.
- Persistencia de datos: Actualmente, la lista de programas está definida en el código. Si deseas que el administrador se mantenga actualizado o permita agregar/quitar programas en tiempo real, podrías almacenar la información en una base de datos o en archivos de configuración (por ejemplo, JSON o YAML) y cargarla al inicio.
- Funciones reales de instalación/desinstalación: Dependiendo del sistema operativo, el mecanismo para instalar o desinstalar programas varía (por ejemplo,
apt
en Linux,winget
ochocolatey
en Windows, obrew
en macOS). Recuerda que ejecutar comandos de instalación o desinstalación generalmente requiere permisos de administrador, por lo que se debe gestionar de forma segura la elevación de privilegios. - Control de errores y logs: Es recomendable implementar un sistema de logs para registrar los resultados de las operaciones, permitiendo diagnosticar problemas en instalaciones o desinstalaciones.