Hola, hay un problema cuando intento ejecutar un archivo en UiPath con un archivo de Python. El archivo se ejecuta sin problemas, pero en cierto punto de la ejecución deja de funcionar y se queda bloqueado. Sin embargo, cuando detengo el proceso en UiPath, el archivo de Python sigue ejecutándose como por arte de magia y completa el proceso, pero tengo que detener el proceso en UiPath.
UiPath Python se bloquea porque inicia un proceso independiente de python.exe que no se detiene junto con UiPath.
Cuando pulsas Detener, UiPath termina su parte, pero Python sigue ejecutándose en segundo plano hasta acabar.
Solución rápida: cierra cualquier proceso de python.exe que siga activo en el Administrador de tareas antes de ejecutar > prueba primero el script por separado en cmd/PyCharm > usa Load Python Script + Invoke Method (no el archivo directamente) > añade instrucciones print/try-catch en Python para detectar los bloqueos > envuélvelo en Try Catch + Terminate Workflow. Actualiza también el paquete UiPath.Python.Activities.
UiPath se congela porque inicia Python como un proceso independiente de python.exe. Cuando el script se bloquea o genera una gran cantidad de resultados, UiPath espera indefinidamente, pero python.exe sigue ejecutándose en segundo plano. Cuando pulsas Detener, UiPath se detiene, pero Python sigue ejecutándose y termina con normalidad.
Soluciónalo usando Load Script + Invoke Method, reduciendo los datos devueltos, añadiendo registros en Python, actualizando el paquete de Python y finalizando los procesos python.exe que queden antes de volver a ejecutarlo.
Si esto te ayudó a solucionar el problema, márcalo como solución para que también pueda ayudar a otras personas
Esto ocurre porque UiPath está esperando a que Python devuelva una respuesta, pero tu script de Python sigue ejecutándose en segundo plano y UiPath cree que está «bloqueado».
Prueba esto:
Añade esto al principio del script.
import sys
sys.stdout = open(sys.devnull, ‘w’)
Además, devuelve siempre algo desde el método.
Llámalo usando:
Python Scope
Load Script
Invoke Python Method: main
Por último, NO uses Run Python Script para procesos largos
En su lugar, incluye todo dentro de una función y llámala con Invoke Python Method.