2016-04-29 12 views
5

Prima di tutto, io sono un noob completo e ha iniziato a utilizzare Node.JS ieri (è stata anche la mia prima volta ad usare Linux in anni) quindi cerca di essere gentile ed esplicitoCome ottenere l'output di un child_process generato in Node.JS?

Attualmente sto facendo un Node.JS programma che deve, tra l'altro, avviare i comandi della shell (principalmente: montare un'unità USB). Attualmente sto usando

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

function shspawn(command) { 
    spawn('sh', ['-c', command], { stdio: 'inherit' }); 
} 

shspawn('echo Hello world'); 
shspawn('mkdir newdir'); 

ecc che è un modo molto comodo di farlo per me. Il problema è che mi piacerebbe memorizzare l'output, ad esempio, un comando "ls" in una variabile, in un modo come

var result = shspawn('ls -l') 

Ho letto alcuni esempi online, ma che uso raramente di spawn e quando lo fanno, non funziona per me (credo che possa fare qualcosa di sbagliato, ma di nuovo sono un noob in Node)

Se voi ragazzi avete un'idea migliore di usare child_process_spawnSync sono aperto a qualsiasi idea, ma vorrei il più a lungo possibile per mantenere il mio programma senza pacchetti :)

EDIT: Ho bisogno che funzioni in modo sincrono! Ecco perché ho iniziato a usare spawnSync. Userò alcuni comandi come dd, che richiede tempo e deve essere completamente terminato prima che il programma passi a un altro comando.

risposta

5

Si può fare qualcosa come di seguito.

var spawn = require('child_process').spawn; 
    // Create a child process 
    var child = spawn('ls' , ['-l']); 

    child.stdout.on('data', 
     function (data) { 
      console.log('ls command output: ' + data); 
     }); 
    child.stderr.on('data', function (data) { 
     //throw errors 
     console.log('stderr: ' + data); 
    }); 

    child.on('close', function (code) { 
     console.log('child process exited with code ' + code); 
    }); 

Aggiornamento: con spawnSync

var spawn = require('child_process').spawnSync; 
    var child = spawn('ls' , ['-l','/usr']); 
    console.log('stdout here: \n' + child.stdout); 
+1

per me motivo di questo errore: 'child.stdout.on ('dati', la funzione (i dati) {console.log ('ls output dei comandi: '+ dati);}); ^ TipoErrore: Impossibile leggere la proprietà 'on' di null' – Squiller

+0

ha modificato la risposta con piccole modifiche e sembra funzionare per me. riprova. Sto usando la versione del nodo 'v4.2.4' BTW. –

+0

Funziona bene con spawn, grazie :) Ma ho bisogno che funzioni con spawnSync, perché voglio aspettare che ogni comando finisca prima di andare a un altro. A partire da ora, ho una funzione funzionante che esegue il comando, ma NodeJS si avvia nel programma anche prima che il comando sia in grado di restituire qualcosa. – Squiller

Problemi correlati