2015-12-30 10 views
5

Voglio solo chiamare un exe esterno da una app nodejs. Questo exe esterno effettua alcuni calcoli e restituisce un output di cui ha bisogno l'app nodejs. Ma non ho idea di come creare la connessione tra nodejs e un exe esterno. Quindi le mie domande:node.js chiama external exe e attendi l'output

  1. Come si chiama un file exe esterno con argomenti specifici all'interno di nodejs correttamente?
  2. E in che modo è necessario trasmettere in modo efficiente l'output dell'exe al nodojs?

Il nodo deve attendere l'uscita dell'exe esterno. Ma come fa nodejs a sapere quando l'exe ha terminato la sua elaborazione? E poi come devo consegnare il risultato dell'exe? Non voglio creare un file di testo temporaneo in cui scrivo l'output e nodejs legge semplicemente questo file di testo. C'è un modo in cui posso direttamente restituire l'output di exe su nodejs? Non so come un exe esterno possa inviare direttamente il proprio output a nodejs. A proposito: l'exe è il mio programma. Quindi ho pieno accesso a quell'app e posso apportare tutte le modifiche necessarie. Qualsiasi aiuto è benvenuto ...

+0

check-out questo esempio utilizzando il modulo processo figlio: https://gist.github.com/Sidnicious/1215700 – Quy

risposta

8
  1. Con il modulo child_process.
  2. Con stdout.

codice sarà simile a questa

var exec = require('child_process').exec; 

var result = ''; 

var child = exec('ping google.com'); 

child.stdout.on('data', function(data) { 
    result += data; 
}); 

child.on('close', function() { 
    console.log('done'); 
    console.log(result); 
}); 
+0

grazie, un facile esempio che potrei usare come base per il mio progetto. E funziona! – Sheldon

0

Si desidera utilizzare child_process, è possibile utilizzare exec o deporre le uova, a seconda delle esigenze. Exec restituirà un buffer (non è attivo), spawn restituirà un flusso (è live). Ci sono anche alcuni capricci occasionali tra i due, ed è per questo che faccio la cosa divertente che faccio per iniziare a npm.

Ecco un esempio modificato da un tool I wrote che stava cercando di eseguire l'installazione NPM per voi:

var spawn = require('child_process').spawn; 

var isWin = /^win/.test(process.platform); 
var child = spawn(isWin ? 'cmd' : 'sh', [isWin?'/c':'-c', 'npm', 'install']); 
child.stdout.pipe(process.stdout); // I'm logging the output to stdout, but you can pipe it into a text file or an in-memory variable 
child.stderr.pipe(process.stderr); 
child.on('error', function(err) { 
    logger.error('run-install', err); 
    process.exit(1); //Or whatever you do on error, such as calling your callback or resolving a promise with an error 
}); 
child.on('exit', function(code) { 
    if(code != 0) return throw new Error('npm install failed, see npm-debug.log for more details') 
    process.exit(0); //Or whatever you do on completion, such as calling your callback or resolving a promise with the data 
});