2016-02-28 219 views
5
var childProcess = cp.spawnSync(command, args, { 
    cwd: process.cwd(), 
    env: process.env, 
    stdio: 'inherit', 
    encoding: 'utf-8' 
}); 

childProcess.output總是EQ [NULL,NULL,NULL]如何閱讀child_process.spawnSync標準輸出與標準輸入輸出選項 '繼承'

process.stdout.write鉤並沒有給我任何輸出

+0

您是否發現此解決方案?我有同樣的問題,我需要使用''繼承''爲了保持進度顯示,但我不能鉤'stdout.write'或監聽'data'事件... –

+0

@FranDios我的解決方法是使用管道捕捉進程輸出'stdio:[0,isOutputNeeded? 'pipe':1,2],' –

回答

6

如果您不使用'pipe'childProcess.output將不包含輸出。

var cp = require('child_process'); 

var command = 'echo'; 
var args = ['hello', 'world']; 

var childProcess = cp.spawnSync(command, args, { 
    cwd: process.cwd(), 
    env: process.env, 
    stdio: 'pipe', 
    encoding: 'utf-8' 
}); 

console.log(childProcess.output); // [ null, 'hello world\n', '' ] 

這是八九不離十有點兒在documentation for child.stdout和其他地方所指出的,但它並不完全明確。 (通過任何方式,如果您希望看到改進,請打開the Node.js repo的拉取請求。)

+0

這樣我就會錯過child_process進度顯示。這對我很重要。 –