ProyectoPSP/external_launcher.py

58 lines
2.2 KiB
Python

import subprocess
import platform
from tkinter import messagebox
import os
def launch_browser(url):
"""
Lanza la URL proporcionada usando el navegador predeterminado del sistema.
:param url: La URL a abrir.
"""
if not url.startswith(('http://', 'https://')):
url = 'http://' + url
try:
# Usa webbrowser.open para abrir URLs de manera segura y multiplataforma
import webbrowser
webbrowser.open(url)
return True
except Exception as e:
messagebox.showerror("Error de Navegador", f"No se pudo abrir el navegador predeterminado: {e}")
return False
def launch_custom_app(command_list, app_name="Aplicación"):
"""
Lanza una aplicación externa usando una lista de comandos y argumentos.
Ejemplo de command_list: ['notepad.exe', 'C:\\ruta\\a\\archivo.txt']
:param command_list: Una lista que contiene el ejecutable y sus argumentos.
:param app_name: Nombre de la aplicación para mensajes de error.
"""
try:
# Usamos subprocess.Popen para lanzar la aplicación sin bloquear el hilo principal (GUI)
# Esto permite que la aplicación externa se abra y la GUI siga respondiendo.
subprocess.Popen(command_list)
return True
except FileNotFoundError:
messagebox.showerror(f"Error al lanzar {app_name}",
f"El ejecutable '{command_list[0]}' no fue encontrado en el sistema (PATH).")
return False
except Exception as e:
messagebox.showerror(f"Error al lanzar {app_name}", f"Ocurrió un error inesperado: {e}")
return False
def get_platform_browser_command(url):
"""Devuelve la lista de comandos para abrir el navegador según el SO."""
# Intenta usar Chrome si está disponible, si no, usa el predeterminado.
if platform.system() == "Windows":
return ["cmd", "/c", "start", "chrome", url]
elif platform.system() == "Linux":
# 'google-chrome' o 'xdg-open' (para predeterminado)
return ["google-chrome", url]
elif platform.system() == "Darwin": # macOS
return ["open", "-a", "Google Chrome", url]
else:
# Si no se reconoce el SO, recurrimos al método seguro de webbrowser
return None