2014-06-20 161 views
0

我想在的NodeJS打開一個批處理文件並讀取其輸出,打印期間(眼前的一幕,當批次完成)。如何閱讀命令行輸出

例如,像詹金斯/哈德森

我知道這隻適用於Windows。如何做到這一點的任何完整的例子將是有益的,因爲我很新Nodejs

+0

...只適用於Windows?你是什​​麼意思,「它正在打印」?你的意思是作爲一個批處理文件被其他進程更新? –

+0

不,例如,如果我有批次'ECHO嗨 TIMEOUT 1 ECHO bye'首先它會打印嗨,然後超時消息,它會更新,因爲它正在計數。就像命令行一樣。 – Veehmot

回答

1

我相信你會沒事的用Node's child process來運行你的命令,並在打印時監視它的輸出。儘管這對Windows沒有任何限制,所以我可能會錯過你所要求的東西。讓我解釋一下你能做些什麼,希望它能回答這個問題。

想象一下,您有一個文件輸出一些文本,但隨着時間的推移,而不是一次。我們將這個文件命名爲print-something.js。 (我意識到你已經講過一個批處理文件,但是知道child_process可以執行任何可執行文件,所以這裏我將通過Node運行一個JavaScript文件,但是你可以用相同的方式執行一個批處理文件。)

打印something.js

var maxRuns = 5, 
    numRuns = 0; 

function printSomething() { 
    console.log('some output'); 
    setTimeout(function() { 
     numRuns++; 
     if (numRuns < maxRuns) { 
      printSomething(); 
     } 
    }, 1000); 
} 

printSomething(); 

這不是真正重要的這是什麼文件呢,但如果你研究它,你會看到它打印「一些輸出」的5倍,但印有每個語句間隔1秒。在命令行(通過node print-something.js)運行,這將導致:

一些輸出
一些輸出
一些輸出
一些輸出
一些輸出

因此,我們有文件以延遲方式輸出文本。談到我們的注意,讀取輸出的文件,我們有這樣的:

監視器output.js

var spawn = require('child_process').spawn, 
    command = spawn('node', ['print-something.js']); 

command.stdout.on('data', function(data) { 
    console.log('stdout: ' + data); 
}); 

command.on('close', function (code) { 
    console.log('child process exited with code ' + code); 
}); 

這個文件生成一個進程node print-something.js,然後開始檢查其標準輸出。每次獲取數據時,都會將其打印到控制檯。最後,當執行完成時,它輸出退出代碼。運行node monitor-output.js結果:

標準輸出:一些輸出

標準輸出:一些輸出

標準輸出:一些輸出

標準輸出:一些輸出

標準輸出:一些輸出

子進程用代碼0退出

您很可能不會將此文件的輸出打印到控制檯,但這就是我們在這裏所做的僅僅是爲了說明。希望這可以讓你瞭解如何在文件運行時監視文件的輸出,並且在child_process之內完成你將要使用的文件。

+0

謝謝你的完整答案!我會試試這個。 – Veehmot