Cómo invocar scripts externos/programas de node.js

Tengo un C++ programa y un Python script que quiero incorporar a mi node.js web app.

Quiero utilizar para analizar los archivos que se cargan a mi sitio, que puede tomar un par de segundos en procesar, así que yo no bloquear la app así.

Cómo puedo aceptar el archivo, a continuación, sólo tiene que ejecutar el C++ programa y la secuencia de comandos en un sub-proceso de un node.js controlador?

  • Es su programa de C++ que se llama desde dentro de Python o son estas dos llamadas independientes que usted va a hacer? 1) Para Python y 2) para C++ aplicación? O ¿el código de Python de carga y llame a su C++ aplicación?
  • Del nodo child_process cosas ejecutar procesos de forma asincrónica. Si todo lo que quiero hacer es iniciar un programa desde dentro de nodo, que lo va a hacer.
  • La secuencia de comandos de python y C++ app no interactuar a todos; quiero llamar a ambos por separado (no necesitan estar en cualquier orden).
  • si usted puede ejecutar el c++ de la aplicación desde la línea de comandos, a continuación, mi solución debería funcionar… es posible que desee ver en la async biblioteca para ayudar con el control de flujo por ejemplo, llamar a python luego c++ en serie
InformationsquelleAutor alh | 2014-01-07

2 Kommentare

  1. 38

    ver child_process. aquí hay un ejemplo usando spawn, que permite escribir a stdin y leer stderr/stdout como datos de salida. Si usted no tiene ninguna necesidad de escribir la entrada estándar y puede manejar todos los resultados cuando finalice el proceso, child_process.exec ofrece un poco más corta de la sintaxis para ejecutar un comando.

    //with express 3.x
    var express = require('express'); 
    var app = express();
    app.use(express.logger('dev'));
    app.use(express.bodyParser());
    app.use(app.router);
    app.post('/upload', function(req, res){
       if(req.files.myUpload){
         var python = require('child_process').spawn(
         'python',
         //second argument is array of parameters, e.g.:
         ["/home/me/pythonScript.py"
         , req.files.myUpload.path
         , req.files.myUpload.type]
         );
         var output = "";
         python.stdout.on('data', function(data){ output += data });
         python.on('close', function(code){ 
           if (code !== 0) {  
               return res.send(500, code); 
           }
           return res.send(200, output);
         });
       } else { res.send(500, 'No file found') }
    });
    
    require('http').createServer(app).listen(3000, function(){
      console.log('Listening on 3000');
    });
    • Cómo son los tipos manejados con este formato? Si puedo enviar 0.123 como un parámetro, ¿cómo va a python tratar ya que creo que es entrar en una cadena?
    • AFAIK componentes de la dirección URL, así como unix/comandos del shell de windows, siempre use cadenas para todo, así que considero que es el python de la aplicación de la responsabilidad convertirlo a un número. ¿cómo podría decirle a python es un número normal de la línea de comandos de invocación?
    • tienes razón y que hace un montón de sentido. Yo debería haber pensado un poco más jaja. Gracias!
    • Una cosa que puede ayudar es tener el nodo de la aplicación crear un objeto JSON con los datos, que se distinguen número frente a la cadena. A continuación, enviar a la pitón de la aplicación de stdin y analizarlo
  2. 1

    Podría ser una vieja pregunta, pero algunas de estas referencias se proporcionan más detalles sobre las diferentes formas de incluir python en NodeJS.

    Hay varias maneras de hacer esto.

    • primera forma es haciendo npm install python-shell

    y aquí está el código

    var PythonShell = require('python-shell');
    //you can use error handling to see if there are any errors
    PythonShell.run('my_script.py', options, function (err, results) { 
    //your code

    puede enviar un mensaje a python shell mediante
    pyshell.send('hello');

    usted puede encontrar la referencia de la API de aquí-
    https://github.com/extrabacon/python-shell

    • segunda manera – otro paquete puede referirse a es el nodo de python , usted tiene que hacer npm install node-python

    • tercera vía – puede referirse a esta pregunta donde se puede encontrar un ejemplo de uso de un proceso hijo-
      Cómo invocar scripts externos/programas de node.js

    un poco más referencias –
    https://www.npmjs.com/package/python

    si desea utilizar la arquitectura orientada al servicio –
    http://ianhinsdale.com/code/2013/12/08/communicating-between-nodejs-and-python/

    • esto funciona si puedo generar un python proceso de nodo, ya tengo un nodo servidor que ejecuta y una secuencia de comandos de python que se ejecuta en el demonio modo de subproceso, quiero acceder a una variable en python desde el nodo, ¿cómo se ya que hacer

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Recent Articles

Python «set» con duplicados/elementos repetidos

Hay una forma estándar de representar un "conjunto" que puede contener elementos duplicados. Como yo lo entiendo, un conjunto tiene exactamente un cero o...

Python: generador de expresión vs rendimiento

En Python, ¿hay alguna diferencia entre la creación de un generador de objetos a través de un generador de expresión versus el uso de...

Cómo exportar/importar la Masilla lista de sesiones?

Hay una manera de hacer esto? O tengo que tomar manualmente cada archivo de Registro? InformationsquelleAutor s.webbandit | 2012-10-23

no distingue mayúsculas de minúsculas coincidentes en xpath?

Por ejemplo, para el xml a continuación <CATALOG> <CD title="Empire Burlesque"/> <CD title="empire burlesque"/> <CD...