如何读取命令行输出

时间:2014-06-20 22:10:19

标签: javascript node.js

我想在 Nodejs 中打开一个批处理文件并读取其输出,同时打印(批处理完成后,一次)。

例如,像 Jenkins / Hudson

我知道这只适用于 Windows 。任何有关如何执行此操作的完整示例都会有所帮助,因为我是 Nodejs 的新手。

1 个答案:

答案 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中执行您的操作。