2016-04-29 8 views
5

まず最初に、私は完全なnoobであり、昨日Node.JSを使用し始めました。(これは何年もの間Linuxを初めて使用していました。)Node.JSで生成されたchild_processの出力を取得する方法は?

私は現在Node.JSプログラムは、とりわけ、シェルコマンドを起動する必要があります(主に、usbドライブをマウントしてください)。 私は現在、私のためにそれを行うには、本当に快適な方法である

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

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

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

などを使用しています。 問題は、私はいくつかの例を、オンラインで読んだけど、彼らはめったに卵を使用しない

var result = shspawn('ls -l') 

私は同じような方法で、変数では例えば、「LS」コマンドの出力を保存したいということです彼らがするとき、それは私のために働いていない(私は間違ったことをするかもしれないと思うが、私はノードのノブです)

皆さんはchild_process_spawnSyncを使用するよりも良いアイデアを持っている私のプログラムパッケージを無料で保つためにできるだけ長くしたいと思っています:)

編集:同期的に動作する必要があります!だから私はspawnSyncを使い始めたのです。私は、ddのようないくつかのコマンドを使用しています。時間がかかり、プログラムが別のコマンドに移る前に完全に終了する必要があります。

答えて

5

以下のようにすることができます。

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

更新:spawnSync

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

とそれは私にこのエラーを与える: 'child.stdout.on( 'データ'、機能(データ){はconsole.log( 'のlsコマンドの出力: '+データ);}); ^ TypeError:nullの 'on'プロパティを読み取れません。 – Squiller

+0

はマイナーチェンジで答えを編集しました。それは私のために働いているようです。再試行する。私はノードバージョン 'v4.2.4'を使用しています。 –

+0

これはspawnとうまく動作します。ありがとう:) しかし、spawnSyncで動作する必要があります。各コマンドが別のコマンドに行く前に終了するのを待っています。 今のところ、私はコマンドを実行する作業関数を持っていますが、コマンドが何かを返すことができる前でもNodeJSはプログラム内を移動します。 – Squiller

関連する問題