Cómo ejecutar secuencias de comandos de Python en WordPress
Cómo ejecutar secuencias de comandos de Python en WordPress
Publicado: 2023-08-03
Python continúa creciendo en popularidad debido a su facilidad de uso, poderosas bibliotecas y sintaxis simple. A menudo me encuentro creando prototipos de funcionalidades individuales para WordPress con Python antes de convertirlas a PHP.
Pero en lugar de hacer eso, ¿por qué no simplemente ejecutar Python en WordPress? En esta publicación, discutiremos los diversos métodos que se pueden usar para ejecutar el código de Python directamente en un sitio web de WordPress.
Ejecutar secuencias de comandos de Python en WordPress
Podemos usar una función PHP integrada llamada exec() para ejecutar scripts externos, incluso desde Python. Esto requerirá un poco de código tanto en PHP como en Python para que funcione, pero es bastante fácil una vez que entiendes cómo encaja todo.
Podemos crear un complemento o un fragmento de código. Depende de lo que esté buscando construir, pero normalmente creo un fragmento de código que es más fácil de administrar en la interfaz del sitio web.
Primero, asegúrese de que Python esté instalado globalmente en su servidor. Puede hacerlo usted mismo si tiene acceso de raíz; de lo contrario, deberá pedirle a su proveedor de alojamiento web que lo instale. Por ejemplo, en Cloudways, necesitábamos que nos instalaran Python.
Función PHP
Crearemos el código para crear una función PHP que ejecutará cualquier secuencia de comandos de Python en WordPress. Para facilitar su uso, primero le mostraré un fragmento que se puede usar con un complemento de administración de fragmentos de código. Luego podemos echar un vistazo a la creación de un complemento personalizado para hacer lo mismo.
Con esta función, todas las secuencias de comandos de Python viven en la biblioteca de medios y podemos seleccionar la secuencia de comandos para ejecutar especificando el ID del elemento de la biblioteca de medios. Tenga en cuenta que probablemente deba permitir que se cargue el tipo mime de Python. Usé este complemento para habilitarlo.
Esto parece un poco complicado porque terminé agregando mucho manejo de errores. Pero en esencia, todo lo que hace el código es encontrar el archivo de la biblioteca de medios y ejecutar el script, generando lo que sea que termine devolviendo.
Tenga en cuenta que he usado 'python3' ya que eso es lo que está instalado en mi máquina. Es posible que desee cambiarlo a 'python'.
<?php function cwpai_run_python_script($media_id) { // Obtener la ruta del archivo multimedia en el servidor $media_path = get_attached_file($media_id); // Comprueba si el archivo multimedia existe if ($media_path) { // Establece el comando de Python $python_command = 'python3'. escapeshellarg($media_path); // Ejecute el script de Python y capture la salida exec($python_command, $output, $return_status); if ($return_status === 0) { // El script se ejecutó correctamente, devuelve la salida return implode("\n", $output); } else { // La ejecución del script falló, registra el error y devuelve un mensaje de error error_log('Error al ejecutar el script de Python. Comando: ' . $python_command); return 'Error al ejecutar el script de Python.'; } } else { // No se encontró el archivo de medios, registre el error y devuelva un mensaje de error error_log('No se encontró el archivo de medios para el ID de medios'. $media_id); return 'Archivo multimedia no encontrado.'; } } // Ejemplo de uso con ID de medios 6 $resultado = cwpai_run_python_script(6); // Muestra el resultado o maneja el error if (is_string($result)) { // Si el resultado es una cadena, indica un mensaje de error echo $result; } else { // Si el resultado no es una cadena, debe ser la salida del script de Python // Muestra la salida o realiza un procesamiento adicional si es necesario echo $resultado; }
Si creamos un complemento, la estructura puede verse así:
<?php /* Nombre del complemento: CWPAI My Python Descripción del complemento: un complemento para ejecutar secuencias de comandos de Python para archivos multimedia. Versión: 1.0 Autor: Su nombre */ // El código del complemento irá aquí. function cwpai_run_python_script($file_name) { // Obtenga la ruta del directorio del complemento $plugin_dir = plugin_dir_path(__FILE__); // Establezca la ruta del script de Python en relación con el directorio del complemento $python_script_path = $plugin_dir . 'activos/py/' . $nombre_archivo; // Comprobar si el archivo de script de Python existe if (file_exists($python_script_path)) { // Establecer el comando de Python $python_command = 'python3'. escapeshellarg($python_script_path); // Ejecute el script de Python y capture la salida exec($python_command, $output, $return_status); if ($return_status === 0) { // El script se ejecutó correctamente, devuelve la salida return implode("\n", $output); } else { // La ejecución del script falló, registra el error y devuelve un mensaje de error error_log('Error al ejecutar el script de Python. Comando: ' . $python_command); return 'Error al ejecutar el script de Python.'; } } else { // No se encontró el archivo de secuencia de comandos de Python, registre el error y devuelva un mensaje de error error_log('No se encontró el archivo de secuencia de comandos de Python: ' . $python_script_path); return 'Archivo de script de Python no encontrado.'; } }
Para el complemento, es más rápido incluir los scripts de Python en un directorio específico (en este ejemplo, es assets/py), lo que le permite agregarlos y editarlos a través de FTP. Por lo tanto, es mejor si tiene mucho Python para ejecutar en WordPress.
Para usarlo, simplemente llame a la función:
// Ejemplo de uso con el nombre de archivo "ejemplo.py" $resultado = cwpai_run_python_script('ejemplo.py'); // Muestra el resultado o maneja el error if (is_string($result)) { // Si el resultado es una cadena, indica un mensaje de error echo $result; } else { // Si el resultado no es una cadena, debe ser la salida del script de Python // Muestra la salida o realiza un procesamiento adicional si es necesario echo $resultado; }
Código corto
En "producción", también puede ser útil crear un código abreviado de WP para ejecutar un script de Python. Podemos usar la misma función general de arriba, modificando para convertirlo en un código abreviado de WordPress:
function cwpai_run_python_script($atts) { // Extraer atributos de shortcode $args = shortcode_atts(array('media_id' => '1'), $atts); // Obtener la ruta del archivo multimedia en el servidor $media_path = get_attached_file($args['media_id']); // Comprueba si el archivo multimedia existe if ($media_path) { // Establece el comando de Python $python_command = 'python3'. escapeshellarg($media_path); // Ejecute el script de Python y capture la salida exec($python_command, $output, $return_status); if ($return_status === 0) { // El script se ejecutó correctamente, devuelve la salida return implode("\n", $output); } else { // La ejecución del script falló, registra el error y devuelve un mensaje de error error_log('Error al ejecutar el script de Python. Comando: ' . $python_command); return 'Error al ejecutar el script de Python.'; } } else { // No se encontró el archivo de medios, registre el error y devuelva un mensaje de error error_log('No se encontró el archivo de medios para el ID de medios' . $args['media_id']); return 'Archivo multimedia no encontrado.'; } } add_shortcode('run_python_script', 'cwpai_run_python_script');
Ahora puede usar el código abreviado [run_python_script media_] directamente en sus publicaciones y páginas. Reemplace "6" con la ID del archivo multimedia que desea usar.
Usar un servicio alojado
Existen docenas de servicios alojados que le permiten acceder a Python a través de las API. Esto podría ser útil para proyectos y flujos de trabajo más complejos, especialmente porque puede acceder a la salida en PHP (usando CURL) como si hubiera creado su propio complemento personalizado.
Primero, deberá crear una API con Python. Aquí hay un buen recurso para eso. Básicamente, usará Flask para crear una aplicación web que exponga los puntos finales de la API. Luego, alojará esa aplicación web con uno de estos servicios y accederá a los diferentes puntos finales de la API con PHP.
Aquí hay una aplicación Python de ejemplo que tiene la API:
Y cómo accedería en PHP, permitiéndome usar esos datos en WordPress (ya sea cambiando los campos de la base de datos, agregando un nuevo usuario, etc.)
<?php // URL del extremo de la API $apiUrl = 'http://your-python-api-domain.com/api/data'; // Datos para enviar a la API de Python $datos = array( 'mensaje' => '¡Hola desde PHP!' ); // Convertir datos a JSON $datosJson = json_encode($datos); // Inicializar la sesión cURL $ch = curl_init(); // Establecer las opciones de cURL curl_setopt($ch, CURLOPT_URL, $apiUrl); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $datosJson); curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json')); curl_setopt($ch, CURLOPT_RETURNTRANSFER, verdadero); // Ejecuta la sesión cURL y captura la respuesta $response = curl_exec($ch);
Ahora, con los datos de $response, puede usarlos con cualquier función de WordPress. Este es un ejemplo básico, pero bueno para mostrar cómo harías esto.
Si eres un poco técnico y quieres algo barato, te sugiero que implementes tu aplicación de Python usando Digital Ocean, que cuesta $2.50/mes para cosas simples.
Si desea algo rápido, simple y fácil, visite PythonAnywhere.com, que comienza en $5/mes.
Aparte de los escenarios pequeños, este método es probablemente la mejor manera de hacer las cosas.
Convertir Python en PHP
Otra opción sería simplemente convertir Python a PHP y usar un complemento como Code Snippets para ejecutar esa función.
Puede convertirlo manualmente a PHP, o usar una herramienta como ChatGPT o CodeWP para pegar en Python y solicitar que se reescriba en PHP. Aquí hay un ejemplo con CodeWP, una herramienta de inteligencia artificial creada específicamente para creadores de WordPress:
Conclusión
Siendo un desarrollador de WordPress que trabaja con IA, a menudo necesito simular algo rápidamente con Python, o incluso crear funcionalidades completas de nivel de producción en el lenguaje.
Siguiendo estos métodos, puede ejecutar Python rápidamente en un sitio de WordPress y acceder a cualquier salida que pueda producir.