2016-04-29 28 views
5

首先,我是一個完整的小白和如何使用Node.js昨天開始(也正是在多年使用Linux我第一次),所以請好的,明確的如何獲取Node.JS中派生的child_process的輸出?

我目前正在製作的node.js程序,其中包括啓動shell命令(主要是:掛載USB驅動器)。 我目前使用

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

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

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

等,這是一個非常舒適的方式來爲我做。 的問題是,我想存儲的輸出,例如,「LS」在一個變量的命令,在某種程度上像

var result = shspawn('ls -l') 

我讀過一些在線的例子,但他們很少用菌種當他們這樣做,它不適合我(我想我可能做錯了什麼,但我再次在節點noob)

如果你們有比使用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命令輸出: '+ data);}); ^ TypeError:無法讀取屬性'on'的空' – Squiller

+0

編輯答案只是微小的變化,它似乎是爲我工作。再試一次。我正在使用節點版本'v4.2.4'順便說一句。 –

+0

它適用於spawn,謝謝:) 但我需要它與spawnSync一起工作,因爲我希望等到每個命令結束後再去另一個命令。 截至目前,我有一個執行命令的工作函數,但即使在命令能夠返回任何內容之前,NodeJS仍然在程序中繼續前進。已更新 – Squiller

相關問題