如何读取命令行输出

How to read command line output

本文关键字:输出 取命令行 何读      更新时间:2023-09-26

我想在Nodejs中打开一个批处理文件并读取其输出,而它正在打印(而不是所有内容,当批处理完成时)。

例如

,像詹金斯/哈德逊

我知道这只适用于Windows。任何关于如何做到这一点的完整示例都会有所帮助,因为我对Nodejs非常陌生。

我相信您可以使用Node的子进程来运行您的命令,并在它打印时监视它的输出。这在Windows上没有任何限制,所以我可能在你的问题中遗漏了一些东西。让我解释一下你能做什么,希望它能回答这个问题。

假设您有一个输出一些文本的文件,但是需要一段时间才能输出,而不是一次全部输出。我们将这个文件命名为print-something.js。(我知道您谈到了批处理文件,但是知道child_process可以执行任何可执行文件。因此,这里我将通过Node运行JavaScript文件,但您可以以相同的方式执行批处理文件。

print-something.js

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

这个文件做什么并不重要,但是如果你研究它,你会看到它打印了5次"some output",但是每个语句之间有1秒的间隔。从命令行运行该命令(通过node print-something.js)将得到:

一些输出
一些输出
一些输出
一些输出
一些输出

这样,我们就有了一个以延迟方式输出文本的文件。将我们的注意力转向读取输出的文件,我们有:

monitor-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中对其进行处理。