web-dev-qa-db-fra.com

Comment appeler des scripts / programmes externes à partir de node.js

J'ai un C++ programme et un script Python que je souhaite intégrer dans mon node.js application Web.

Je veux les utiliser pour analyser les fichiers qui sont téléchargés sur mon site; cela peut prendre quelques secondes à traiter, donc j'éviterais également de bloquer l'application.

Comment puis-je simplement accepter le fichier puis exécuter simplement le C++ programme et script dans un sous-processus à partir d'un node.js manette?

22
alh

voir child_process . voici un exemple utilisant spawn, qui vous permet d'écrire sur stdin et de lire depuis stderr/stdout lors de la sortie des données. Si vous n'avez pas besoin d'écrire dans stdin et que vous pouvez gérer toutes les sorties à la fin du processus, child_process.exec offre une syntaxe légèrement plus courte pour exécuter une commande.

// 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');
});
37
Plato

Cela peut être une vieille question, mais certaines de ces références fourniront plus de détails et différentes façons d'inclure python dans NodeJS.

Il existe plusieurs façons de procéder.

  • la première façon est de faire npm install python-Shell

et voici le code

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

vous pouvez envoyer un message à python Shell en utilisant pyshell.send('hello');

vous pouvez trouver la référence API ici- https://github.com/extrabacon/python-Shell

quelques références supplémentaires - https://www.npmjs.com/package/python

si vous souhaitez utiliser une architecture orientée services - http://ianhinsdale.com/code/2013/12/08/communicating-between-nodejs-and-python/

1
Tejus Prasad