Cómo ejecutar un script de Python al iniciar Windows

Publicado el: 11/07/2026
Tempo de leitura: 6 minutos
Script Python configurado para iniciar junto com o Windows

Ejecutar un script de Python automáticamente cuando Windows se inicia es útil para tareas de supervisión, copias de seguridad, organización de archivos, sincronización, generación de informes y automatizaciones internas. Existen varias formas de hacerlo, pero las más prácticas son la carpeta de Inicio, el Programador de tareas y un archivo por lotes. La mejor opción depende de si necesitas una ejecución simple, privilegios elevados, retrasos, repetición o recuperación ante errores.

Antes de configurar el inicio automático, asegúrate de que el script funcione manualmente. También resulta útil conocer cómo evitar que un script se bloquee, cómo registrar eventos con logging, cómo leer variables de entorno de forma segura y cómo organizar archivos del PC con Python.

Preparar el script

Un script ejecutado durante el inicio no debe depender del directorio actual. Utiliza rutas absolutas construidas con pathlib:

from pathlib import Path
import logging

BASE = Path(__file__).resolve().parent
LOG = BASE / "inicio.log"

logging.basicConfig(
    filename=LOG,
    level=logging.INFO,
    format="%(asctime)s %(levelname)s %(message)s"
)

logging.info("El script se inició correctamente")

Cuando Windows ejecuta una tarea, el directorio de trabajo puede ser C:\Windows\System32. Si el programa usa rutas relativas como datos/config.json, es posible que no encuentre los archivos. Basar las rutas en __file__ evita ese problema.

Comprobar el intérprete correcto

En CMD ejecuta:

where python
py -0p

El primer comando muestra los ejecutables encontrados en PATH. El segundo lista las instalaciones registradas por Python Launcher. Guarda la ruta del intérprete que tiene las dependencias necesarias. Cuando el proyecto utiliza un entorno virtual, normalmente será:

C:\ruta\proyecto\.venv\Scripts\python.exe

No confíes en que python apunte al mismo intérprete durante el inicio. Es preferible utilizar la ruta completa.

Método 1: carpeta de Inicio

Presiona Win + R, escribe:

shell:startup

Windows abrirá la carpeta de Inicio del usuario actual. Crea un acceso directo cuyo destino sea:

"C:\ruta\proyecto\.venv\Scripts\pythonw.exe" "C:\ruta\proyecto\main.py"

pythonw.exe ejecuta el programa sin abrir una ventana de consola. Es adecuado para scripts silenciosos, pero también oculta mensajes y errores. Por eso el registro con logging es imprescindible. Durante las pruebas usa python.exe para ver la salida; cambia a pythonw.exe cuando todo esté estable.

La carpeta de Inicio es rápida y sencilla, pero ofrece poco control. La tarea se ejecuta cuando el usuario inicia sesión, no necesariamente cuando el equipo arranca. Tampoco permite definir reintentos, retrasos o condiciones avanzadas.

Método 2: archivo BAT

Crea iniciar_script.bat:

@echo off
cd /d "C:\ruta\proyecto"
"C:\ruta\proyecto\.venv\Scripts\python.exe" "main.py" >> "inicio-bat.log" 2>&1

cd /d cambia de unidad y directorio. La redirección >> añade la salida a un archivo y 2>&1 incluye los errores. Puedes colocar un acceso directo al BAT en la carpeta de Inicio.

No almacenes contraseñas, tokens ni claves directamente en el BAT. Utiliza variables de entorno, el Administrador de credenciales de Windows o un sistema de secretos apropiado.

Método 3: Programador de tareas

El Programador de tareas es la opción recomendada para automatizaciones importantes. Permite ejecutar al iniciar sesión, al arrancar el sistema, a una hora determinada o cuando ocurre un evento.

  1. Abre “Programador de tareas”.
  2. Selecciona “Crear tarea”, no solamente “Crear tarea básica”.
  3. Escribe un nombre descriptivo.
  4. En “Desencadenadores”, elige “Al iniciar sesión” o “Al iniciar el sistema”.
  5. En “Acciones”, elige “Iniciar un programa”.
  6. En “Programa o script”, introduce la ruta completa de python.exe o pythonw.exe.
  7. En “Agregar argumentos”, introduce la ruta del script entre comillas.
  8. En “Iniciar en”, indica la carpeta del proyecto sin comillas.

Ejemplo:

Programa:
C:\proyecto\.venv\Scripts\python.exe

Argumentos:
C:\proyecto\main.py

Iniciar en:
C:\proyecto

La documentación oficial de Microsoft sobre Task Scheduler explica los desencadenadores, acciones, condiciones y configuraciones disponibles.

Configurar un retraso

Algunos scripts necesitan esperar a que la red, una unidad compartida o un servicio esté disponible. En el desencadenador puedes marcar “Retrasar la tarea” durante uno o varios minutos. Otra posibilidad es implementar reintentos:

import time
import requests
import logging

for intento in range(1, 6):
    try:
        respuesta = requests.get("https://example.com", timeout=10)
        respuesta.raise_for_status()
        logging.info("Conexión disponible")
        break
    except requests.RequestException as error:
        logging.warning("Intento %s falló: %s", intento, error)
        time.sleep(30)
else:
    logging.error("No fue posible conectar")

Define un número máximo de intentos. Un bucle infinito sin espera puede consumir recursos y llenar el archivo de registro.

Ejecutar con privilegios

Si el script necesita acceder a carpetas protegidas, servicios o configuraciones del sistema, el Programador de tareas permite marcar “Ejecutar con los privilegios más altos”. Úsalo únicamente cuando sea indispensable. Ejecutar código como administrador aumenta el impacto de cualquier error o dependencia comprometida.

También puedes elegir “Ejecutar tanto si el usuario inició sesión como si no”. Windows solicitará credenciales y ejecutará la tarea en segundo plano. En ese modo, las interfaces gráficas no se mostrarán en el escritorio del usuario.

Evitar múltiples instancias

Si el usuario inicia sesión varias veces o la tarea se repite, podrían quedar varias copias. En la configuración de la tarea, selecciona “No iniciar una nueva instancia” cuando ya exista una ejecución. También puedes crear un archivo de bloqueo:

from pathlib import Path
import sys

lock = Path(__file__).with_suffix(".lock")

if lock.exists():
    sys.exit("Ya existe una instancia")

try:
    lock.write_text(str(Path.cwd()), encoding="utf-8")
    # trabajo principal
finally:
    lock.unlink(missing_ok=True)

Para programas críticos, un mecanismo de bloqueo del sistema es más robusto, pero este patrón sencillo ayuda en automatizaciones personales.

Controlar errores y salida

Cuando el script se ejecuta sin terminal, una excepción puede pasar desapercibida. Configura logging y captura errores en el punto de entrada:

import logging


def main():
    logging.info("Comienza el trabajo")
    # tareas
    logging.info("Trabajo terminado")


if __name__ == "__main__":
    try:
        main()
    except Exception:
        logging.exception("Fallo inesperado")
        raise

La guía oficial de Python para Windows documenta el lanzador py, las asociaciones de archivos y las particularidades de la instalación.

Probar la tarea correctamente

En el Programador de tareas, selecciona la tarea y pulsa “Ejecutar”. Revisa “Último resultado de ejecución”, el historial y el archivo de log. El código 0x0 normalmente indica éxito. Si la tarea funciona manualmente pero falla durante el inicio, revisa rutas, permisos, variables de entorno, unidades de red y el campo “Iniciar en”.

Las unidades mapeadas como Z: pueden no existir para una tarea en segundo plano. Usa rutas UNC como \\servidor\carpeta y concede permisos a la cuenta que ejecuta la tarea.

Detener y actualizar el script

Antes de reemplazar archivos, termina la tarea desde el Programador. Mantén el proyecto bajo control de versiones y prueba los cambios en otra ubicación. Si el script se actualiza automáticamente, valida firmas o hashes antes de ejecutar código nuevo. No descargues y ejecutes archivos arbitrarios desde Internet durante el inicio.

Errores frecuentes

Los fallos más comunes son utilizar rutas relativas, seleccionar un Python sin dependencias, omitir “Iniciar en”, depender de una unidad de red no disponible, usar pythonw.exe sin logging y ejecutar con permisos insuficientes. También es habitual que el script espere una entrada con input(); una tarea de fondo no debe requerir interacción.

Conclusión

Para automatizaciones simples, la carpeta de Inicio puede ser suficiente. Para tareas confiables, con reintentos, retrasos, permisos y ejecución en segundo plano, utiliza el Programador de tareas. Emplea rutas absolutas, el intérprete del entorno virtual, registros persistentes y una política que evite instancias duplicadas. Así el script podrá iniciarse con Windows de forma predecible y fácil de mantener.

Compartilhe:

Facebook
WhatsApp
Twitter
LinkedIn

Contenido del artículo

    Artículos relacionados

    Comparando listas e diferenças entre arrays em Python
    Automatización y Scripts
    Foto de perfil de Leandro Hirt da Academify

    Cómo comparar dos listas en Python y encontrar diferencias

    Compara listas en Python con igualdad, sorted, sets y Counter, conserva duplicados, detecta registros modificados y evita errores frecuentes.

    Ler mais

    Tempo de leitura: 4 minutos
    11/07/2026
    Automação em Python para organizar arquivos do computador
    Automatización y Scripts
    Foto de perfil de Leandro Hirt da Academify

    Cómo organizar automáticamente los archivos de tu PC con Python

    Organiza automáticamente archivos del PC con Python, pathlib y shutil, evitando sobrescrituras, descargas incompletas y movimientos sin registro.

    Ler mais

    Tempo de leitura: 4 minutos
    11/07/2026
    Sistema de backup automático de arquivos usando Python
    Automatización y Scripts
    Foto de perfil de Leandro Hirt da Academify

    Cómo automatizar copias de seguridad con Python

    Aprende a automatizar copias de seguridad con Python usando pathlib, shutil, fechas, verificación, registros y una estrategia segura de restauración.

    Ler mais

    Tempo de leitura: 4 minutos
    11/07/2026
    Execução de comandos do terminal usando Python
    Automatización y Scripts
    Foto de perfil de Leandro Hirt da Academify

    Subprocess en Python: ejecutar comandos del terminal

    Aprende subprocess en Python para ejecutar comandos, capturar salida, manejar errores, establecer timeouts y evitar riesgos con shell=True.

    Ler mais

    Tempo de leitura: 4 minutos
    11/07/2026
    representação de automação com ícones de engrenagens, gráficos e pessoas no background
    Automatización y Scripts
    Foto de perfil de Leandro Hirt da Academify

    Cómo automatizar tareas cotidianas con Python

    Aprende a automatizar tareas con Python: organizar archivos, renombrar lotes, procesar CSV, crear backups, usar logs y programar scripts.

    Ler mais

    Tempo de leitura: 5 minutos
    11/07/2026
    logo do BeautifulSoup em um fundo branco
    Automatización y Scripts
    Foto de perfil de Leandro Hirt da Academify

    Web scraping con Python, Requests y BeautifulSoup

    Aprende web scraping con Python, Requests y BeautifulSoup: descarga páginas, selecciona elementos, limpia datos, pagina, maneja errores y exporta resultados.

    Ler mais

    Tempo de leitura: 4 minutos
    11/07/2026