我想在 Nodejs 中打开一个批处理文件并读取其输出,同时打印(批处理完成后,不一次)。
例如,像 Jenkins / Hudson 。
我知道这只适用于 Windows 。任何有关如何执行此操作的完整示例都会有所帮助,因为我是 Nodejs 的新手。
答案 0 :(得分: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
会导致:
stdout:一些输出
stdout:一些输出
stdout:一些输出
stdout:一些输出
stdout:一些输出
子进程退出,代码为0
很可能你不会将这个文件的输出打印到控制台,但这就是我们在这里做的只是为了说明。希望这可以让您了解如何在文件运行时监视文件的输出,并在child_process
中执行您的操作。