Ejecuta scripts Python al iniciar Windows

Actualizado el: 20/08/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

    Imagem ilustrativa de conteúdo Python para YouTube
    Automatización y Scripts
    Foto de perfil de Leandro Hirt da Academify

    YouTube con Python: descarga vídeos propios con yt-dlp

    Descarga copias de tus propios vídeos o contenido autorizado con Python y yt-dlp, validación, historial, límites, FFmpeg y prácticas responsables.

    Ler mais

    Tempo de leitura: 6 minutos
    12/07/2026
    Automação de postagens no Twitter usando Python
    Automatización y Scripts
    Foto de perfil de Leandro Hirt da Academify

    Tweepy: automatiza publicaciones en X con Python

    Automatiza publicaciones en X con Tweepy, credenciales seguras, validación, deduplicación, programación, logs y prácticas responsables contra el spam.

    Ler mais

    Tempo de leitura: 5 minutos
    12/07/2026
    Geração e edição de planilhas Excel usando Python
    Automatización y Scripts
    Foto de perfil de Leandro Hirt da Academify

    Excel con Python: crea y edita con openpyxl

    Crea y edita Excel con Pandas y openpyxl: hojas, fórmulas, estilos, filtros, validación, gráficos, rutas seguras y manejo de archivos

    Ler mais

    Tempo de leitura: 4 minutos
    12/07/2026
    Gerando aplicativo APK Android com Python
    Automatización y Scripts
    Foto de perfil de Leandro Hirt da Academify

    APK Android con Python, Kivy y Buildozer

    Genera un APK Android con Python, Kivy y Buildozer: configuración, permisos, recursos, compilación, pruebas, almacenamiento, firma y publicación.

    Ler mais

    Tempo de leitura: 6 minutos
    12/07/2026
    Web scraper de notícias em Python com envio para Telegram
    Automatización y Scripts
    Foto de perfil de Leandro Hirt da Academify

    Scraper de noticias con Python y Telegram

    Crea un scraper de noticias con Requests y Beautiful Soup, elimina duplicados y envía titulares a Telegram de forma segura

    Ler mais

    Tempo de leitura: 5 minutos
    11/07/2026
    Compactação de arquivos ZIP usando Python
    Automatización y Scripts
    Foto de perfil de Leandro Hirt da Academify

    zipfile: descomprime archivos ZIP con seguridad

    Descomprime archivos ZIP con Python de forma segura: valida rutas, evita Zip Slip, limita tamaños, verifica integridad y procesa archivos

    Ler mais

    Tempo de leitura: 4 minutos
    11/07/2026