我想在的NodeJS打開一個批處理文件並讀取其輸出,打印期間(不眼前的一幕,當批次完成)。如何閱讀命令行輸出
例如,像詹金斯/哈德森。
我知道這隻適用於Windows。如何做到這一點的任何完整的例子將是有益的,因爲我很新Nodejs。
我想在的NodeJS打開一個批處理文件並讀取其輸出,打印期間(不眼前的一幕,當批次完成)。如何閱讀命令行輸出
例如,像詹金斯/哈德森。
我知道這隻適用於Windows。如何做到這一點的任何完整的例子將是有益的,因爲我很新Nodejs。
我相信你會沒事的用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
之內完成你將要使用的文件。
謝謝你的完整答案!我會試試這個。 – Veehmot
...只適用於Windows?你是什麼意思,「它正在打印」?你的意思是作爲一個批處理文件被其他進程更新? –
不,例如,如果我有批次'ECHO嗨 TIMEOUT 1 ECHO bye'首先它會打印嗨,然後超時消息,它會更新,因爲它正在計數。就像命令行一樣。 – Veehmot