Parcela de retorno de una función pitón a la aplicación Node.js

Tengo una Express Node.js aplicación y una función que utiliza matplotlib para generar parcela Python.

¿Hay una manera de llamar a las funciones de Python de mi aplicación Node.js y enviar el plot de vuelta a Node.js después de haber sido ejecutado? Y enviar el plot a React página de Node.js?

Sé que puedes usar el proceso infantil para llamar a la función de pitón y enviar los datos de vuelta, pero no sé cómo hacerlo por plot.

Pregunta hecha hace 3 años, 4 meses, 25 días - Por debugdragon


3 Respuestas:

  • Desde Embedding en un servidor de aplicaciones web (Flask) ejemplo, sabemos:

    Desde Matplotlib 3.1, se pueden crear figuras directamente utilizando el constructor de Figuras y guardarlas en búferes en memoria.

    Así que aquí está el flujo de trabajo:

    Reactir servidor web = confianza Nodejs server = confianza Python flask server

    Puede crear APIs RESTful para enviar la parcela buffer, imagen HTML, cadena base de imagen64, etc. volver al servidor Nodejs.

    Su servidor web React puede enviar una solicitud HTTP para obtener estos datos de diagrama del servidor Nodejs y renderizarlo.

    Respondida el Dec 20, 2020 a las 10:58 - por bytebison

    Votos positivos: 0 | Votos negativos: 0

  • Sí, es posible integrar funciones de Python que generan un gráfico utilizando matplotlib en una aplicación Node.js y luego enviar el gráfico de vuelta a Node.js para mostrarlo en una página de React.

    Una forma de lograr esto es mediante el uso de un proceso secundario (child process) en Node.js para ejecutar el script de Python que genera el gráfico. A continuación te muestro un ejemplo de cómo podrías hacerlo:

    • En tu aplicación Node.js, primero debes instalar el módulo `child_process` de Node.js si aún no lo has hecho:
    bash
    npm install child_process
    
    • Luego, debes crear un script en Python que genere el gráfico utilizando matplotlib. Por ejemplo, podrías tener un archivo `generate_plot.py` con el siguiente contenido:
    python
    import matplotlib.pyplot as plt
    
    

    Código para generar el plot

    plt.plot([1, 2, 3, 4]) plt.ylabel('algunos números') plt.savefig('plot.png')
    • En tu aplicación Node.js, puedes llamar a este script de Python utilizando `child_process` y luego enviar el gráfico de vuelta como un archivo a tu aplicación:

    ```javascript const { exec } = require('child_process');

    // Ejecutar el script de Python exec('python generate_plot.py', (error, stdout, stderr) => { if (error) { console.error(Error al ejecutar el script: ${error}); return; }

    // Enviar el archivo de plot a tu aplicación Node.js // Por ejemplo, puedes enviar el archivo utilizando express res.sendFile('plot.png', { root: __dirname }); }); ```

    • En tu aplicación de React, puedes mostrar el gráfico utilizando la URL del archivo que has enviado desde Node.js. Por ejemplo, puedes utilizar una etiqueta `img` en tu componente de React:
    javascript
    function App() {
      return (
        
    plot
    ); }

    Con estos pasos, podrás ejecutar una función de Python para generar un gráfico utilizando matplotlib, enviar el gráfico de vuelta a tu aplicación Node.js y mostrarlo en una página de React. Asegúrate de ajustar el código según tus necesidades específicas y configuraciones.

    Respondida el Dec 21, 2020 a las 10:57 - por Gpt

    Votos positivos: 0 | Votos negativos: 0

  • Paso 1: Ejecutar la función de Python desde Node.js

    Utiliza el módulo child_process de Node.js para ejecutar la función de Python que genera el gráfico:

    javascript
    const { spawn } = require('child_process');
    
    const pythonProcess = spawn('python', ['python_script.py'], {
      cwd: pathToPythonScript,
    });
    

    Paso 2: Recibir la salida de la función de Python (gráfico)

    Configura un manejador para el evento data del proceso de Python para recibir la salida (gráfico):

    javascript
    pythonProcess.stdout.on('data', (data) => {
      // Aquí recibirás la salida del script de Python, que puede ser una imagen o datos binarios del gráfico.
    });
    

    Paso 3: Convertir la salida en una imagen

    Si la salida es una imagen, puedes utilizar el módulo sharp de Node.js para convertirla en un formato que se pueda mostrar en React:

    javascript
    const sharp = require('sharp');
    
    sharp(data).png().toBuffer((err, buffer) => {
      // Aquí tienes el búfer de la imagen que puedes enviar a React.
    });
    

    Paso 4: Enviar la imagen a la página de React desde Node.js

    Puedes utilizar una biblioteca como socket.io para enviar el búfer de la imagen a la página de React:

    En Node.js:

    javascript
    const io = require('socket.io')(server);
    
    io.on('connection', (socket) => {
      // Cuando llega una nueva conexión, envía el búfer de la imagen.
      socket.emit('plot', buffer);
    });
    

    En React:

    javascript
    import io from 'socket.io-client';
    
    const socket = io();
    
    socket.on('plot', (buffer) => {
      // Recibe el búfer de la imagen y úsalo para mostrar el gráfico.
    });
    

    Mejoras opcionales:

    Compresión: Puedes comprimir la imagen antes de enviarla para reducir el tamaño de la transferencia. Uso de archivos temporales: En lugar de enviar la imagen directamente, puedes guardarla en un archivo temporal y enviar solo el nombre del archivo a React. Almacenamiento en caché:* Puedes almacenar en caché la imagen en el lado de Node.js para evitar tener que volver a generarla cada vez.

    Respondida el Dec 21, 2020 a las 11:04 - por Gemini

    Votos positivos: 0 | Votos negativos: 0