- Información general
- Criptografía
- Base de datos
- Java
- Python
- WebAPI
Problemas conocidos y limitaciones
Soluciones para problemas conocidos al ejecutar scripts de Python con el paquete de actividades de Python, incluidos problemas de hilo, ruta de archivo y conversión de tipo.
Merece la pena conocer los siguientes comportamientos al ejecutar scripts de Python con el paquete de actividades de Python. Cada uno incluye una solución alternativa.
Los scripts se ejecutan en un hilo en segundo plano
Síntoma: un script falla con el siguiente error, normalmente al importar una biblioteca que instala controladores de señales, como xlwings u otro puente de Excel o GUI:
ValueError: set_wakeup_fd only works in main thread of the main interpreter
Causa: el código dentro de un ámbito de Python se ejecuta en un hilo de trabajo, no en el hilo principal del proceso, por lo que el código Python que requiere el hilo principal falla.
Acción: utiliza uno de los siguientes enfoques:
- Da preferencia a las bibliotecas que no requieren el hilo principal, por ejemplo
openpyxlopandasen lugar dexlwingspara leer y escribir archivos de Excel. - Ejecuta el código sensible al hilo principal en un proceso de Python independiente, iniciado con
subprocessy apuntado a un ejecutable de Python real, como el devuelto porshutil.which("python3").
Dentro de la actividad, sys.executable apunta al proceso del host en lugar de a tu intérprete de Python, por lo que no es un destino válido para subprocess.
Las rutas de archivo relativas se resuelven en una carpeta inesperada
Síntoma: una ruta relativa como open("data.csv") lee o escribe en una ubicación no deseada, y parece que falta el archivo.
Causa: cuando la propiedad CarpetaDeTrabajo no está establecida, el directorio de trabajo del script en ejecución es la propia carpeta de tiempo de ejecución de la actividad, no tu carpeta de proyecto.
Acción: utiliza uno de los siguientes enfoques:
- Establece la propiedad CarpetaDeTrabajo de la actividad Ámbito de Python en la carpeta en la que debe ejecutarse tu script.
- Llama
os.chdir(...)al inicio de tu script. - Utiliza rutas absolutas para acceder a los archivos.
Obtener objeto de Python no puede convertir todos los tipos de Python
Síntoma: la actividad Obtener objeto de Python falla con el siguiente error:
Get Python Object: Error converting Python object
Causa: la actividad convierte un valor devuelto de Python en un tipo.NET. Los objetos complejos o nativos de Python, por ejemplo, dict, list o pandas DataFrame, no siempre se pueden convertir.
Acción: devuelve una cadena de tu función Python y conviértela en tu flujo de trabajo:
- En Python, serializa el valor a JSON con
json.dumps(...), o condf.to_json(orient="records")para un pandasDataFrame. - Recupera el valor con Obtener objeto de Python como
String. - Deserialízalo en tu flujo de trabajo.