2017-09-27 91 views
0

不同當我運行下面的代碼,我沒有得到輸出到控制檯一樣,因爲我看到,如果我直接通過終端運行此命令。任何想法爲什麼?除stdout.on('data')之外是否還有另外一個功能可以提供更多信息?節點的子進程產卵輸出比從終端

具體而言,當我通過終端運行它,我得到的指示命令完成的百分比排序的進度條。當我通過節點運行它時,它會吐出一些較早的類似信息,然後停下來一會兒,直到命令完成。

var sh = spawn('sh', ['app/scripts/scriptA.sh', path]); 

sh.stdout.on('data', function (data) { 
    console.log(data.toString()); 
}); 
+0

是否有可能在'stderr'流取得流動控制和果醬的東西了?也許增加一個'sh.stderr.on('data',...)'處理程序。 – jfriend00

+0

此外,運行它你的方式,並在命令行中運行它之間的主要區別在於,在命令行運行時,你是在shell中運行,但運行它時,你的方式,你是不是。這可能會導致一些不同的行爲。如果你願意的話,你可以告訴生成器在shell中運行它。 – jfriend00

回答

1

有一些差異。

這可能是你在stderrsh.stderr.on('data', ...))缺少的東西。

另一種可能性,特別是如果它是一個進度條樣東西被重寫線,然後console.log()將無法​​做到這一點。

這些進度條的工作方式是使用process.stdout.write()process.stdout.cursorTo()process.stdout.clearLine()的組合,實際上它們可以讓它們擦除和重寫一行。從data通過console.log將輸出非常不同。