2016-04-29 17 views
5

Przede wszystkim, jestem kompletnym noobem i zaczął używać node.js wczoraj (to był także mój pierwszy raz przy użyciu systemu Linux w roku), więc proszę być miły i wyraźnyJak uzyskać dane wyjściowe odrodzonego procesu child_process w pliku Node.JS?

Jestem obecnie dokonywania node.js program, który musi, między innymi, uruchamiać polecenia powłoki (głównie: montować dysk USB). obecnie używam

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

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

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

itd który jest naprawdę wygodny sposób, aby zrobić to za mnie. Problemem jest to, że chciałbym, aby zapisać dane wyjściowe, na przykład, „ls” polecenia w zmiennej, w taki sposób, jak

var result = shspawn('ls -l') 

Czytałem kilka przykładów w Internecie, ale rzadko korzystają z ikry a kiedy to robią, to nie działa dla mnie (myślę, że mogę zrobić coś nie tak, ale znowu jestem noobem w węźle)

Jeśli masz lepszy pomysł niż używanie child_process_spawnSync, jestem otwarty na każdy pomysł, ale chciałbym jak najdłużej utrzymywać mój program bez pakietu :)

EDYCJA: Potrzebuję go do synchronicznej pracy! Właśnie dlatego zacząłem używać spawnSync. Będę używał niektórych komend, takich jak dd, które wymagają czasu i muszą zostać w pełni zakończone, zanim program przejdzie do innego polecenia.

Odpowiedz

5

Możesz zrobić to jak poniżej.

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); 
    }); 

Aktualizacja: z spawnSync

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

To daje mi ten błąd: 'child.stdout.on ('dane', function() {console.log danych ('ls wyjściowe polecenia: "+ dane);}); ^ TypeError: Nie można odczytać właściwości 'on' null' – Squiller

+0

zredagowałem odpowiedź z drobnymi zmianami i wydaje mi się, że działa ona dla mnie. Spróbuj ponownie. Używam wersji węzła "v4.2.4" BTW. –

+0

Dobrze działa z funkcją odradzania, dziękuję :) Ale potrzebuję go do pracy z spawnSync, ponieważ chcę poczekać na zakończenie każdego polecenia przed przejściem do następnego. Na razie mam działającą funkcję, która wykonuje polecenie, ale NodeJS porusza się w programie, nawet zanim polecenie jest w stanie zwrócić wszystko. – Squiller

Powiązane problemy