feature/generador-instaladores-linux-windows
This commit is contained in:
48
runner.py
48
runner.py
@@ -28,9 +28,53 @@ def parse_args(argv: list[str] | None = None) -> argparse.Namespace:
|
||||
action="store_true",
|
||||
help="Fuerza el modo sin interfaz (Qt offscreen) para servidores sin display",
|
||||
)
|
||||
parser.add_argument(
|
||||
"--version",
|
||||
action="store_true",
|
||||
help="Imprime la versión, plataforma y arquitectura, y termina",
|
||||
)
|
||||
return parser.parse_args(argv)
|
||||
|
||||
|
||||
def _attach_windows_console() -> None:
|
||||
"""
|
||||
El .exe se compila con console=False (app de ventana), así que sin consola propia
|
||||
stdout va al vacío. Cuando se invoca desde una terminal, se engancha a la consola
|
||||
del proceso padre para que --version sea legible. En Linux no aplica.
|
||||
"""
|
||||
if sys.platform != "win32":
|
||||
return
|
||||
try:
|
||||
import ctypes
|
||||
|
||||
attach_parent_process = -1
|
||||
if not ctypes.windll.kernel32.AttachConsole(attach_parent_process):
|
||||
return # sin consola del padre (doble clic): no hay dónde escribir
|
||||
sys.stdout = open("CONOUT$", "w", encoding="utf-8", buffering=1)
|
||||
sys.stderr = open("CONOUT$", "w", encoding="utf-8", buffering=1)
|
||||
except (OSError, AttributeError):
|
||||
# Sin consola disponible; el instalador remoto verifica por config/.version.
|
||||
pass
|
||||
|
||||
|
||||
def _print_version() -> int:
|
||||
"""
|
||||
Imprime la versión sin arrancar Qt ni el bootstrap: --version es una consulta.
|
||||
El instalador remoto del PANEL prefiere leer config/.version (que el bootstrap
|
||||
escribe), porque en Windows este stdout depende de haber consola del padre.
|
||||
"""
|
||||
from app import __version__
|
||||
from app.constants import APP_ARCH, APP_PLATFORM
|
||||
|
||||
_attach_windows_console()
|
||||
try:
|
||||
sys.stdout.write(f"CloudRestoreAS {__version__} ({APP_PLATFORM}/{APP_ARCH})\n")
|
||||
sys.stdout.flush()
|
||||
except OSError:
|
||||
pass
|
||||
return 0
|
||||
|
||||
|
||||
def _ensure_qt_platform(headless: bool = False) -> str:
|
||||
"""
|
||||
Selecciona el plugin de plataforma Qt en Linux. En un servidor headless (sin
|
||||
@@ -175,6 +219,10 @@ def _run() -> int:
|
||||
|
||||
def main():
|
||||
"""Punto de entrada: ejecuta _run() y hace visible cualquier fallo de arranque."""
|
||||
# --version se atiende antes del bootstrap y de importar Qt/pyodbc: es una consulta
|
||||
# barata que el instalador remoto usa para verificar el binario recién desplegado.
|
||||
if "--version" in sys.argv[1:]:
|
||||
sys.exit(_print_version())
|
||||
try:
|
||||
sys.exit(_run())
|
||||
except SystemExit:
|
||||
|
||||
Reference in New Issue
Block a user