2014-06-20 94 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