node.js - 捕获流程的连续输出

标签 node.js

我有一个期望脚本,它可以无密码 ssh 到另一个盒子,并使用命令启动一个命令来转储文件内容:tail -f ...

由于我使用 -f tail 选项,命令会等待,直到新数据添加到文件中并立即转储。

我正在使用 exec 从 NodeJS 脚本启动脚本:

var child = exec('script.sh process1 process2', function(err, stdout, stderr) {
if(err)
{
   console.log("Error");
   return;
}
var result;
while((result = stdout.toString.split("\r\n")) != null)
{
  logger.info(result);
}
}
});

但是我在控制台日志中收到以下错误:

Error in expect script ::Error: maxBuffer exceeded.

由于输出是标准输出流上的连续数据,我如何才能实现所需的目标。我尝试使用 spawn 但出现以下错误:

NodeJS : warning: possible EventEmitter memory leak detected. 11 listeners added. Use emitter.setMaxListeners() to increase limit

如何解决这个问题?

编辑::

当相关命令完成运行或返回错误时,似乎会调用回调或事件。即使我的命令仍在后台执行,是否有办法获得输出?

最佳答案

看起来spawn是正确的选择,因为它意味着处理流,而exec的最大缓冲区为200k。

您的生成输出只是一个警告:possible EventEmitter memory leak detected

关于node.js - 捕获流程的连续输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14018038/

相关文章:

javascript - 如何在 macos Catalina 上永久安装 NVM?

ubuntu - Node.js 的持久性脚本?

javascript - 为什么我们不能将 'console' 视为 'global' 对象的属性?

javascript - 类型错误 : f is not a function after Babel Transpilation in Node

javascript - 将 async/await 与 forEach 循环结合使用

node.js - Node js常见做法

javascript - 如何使用node.js在服务器端用纯javascript读取JSON文件?

node.js - express.js 路由行为

node.js - Jasmine 无法监视 async.waterfall block 中调用的函数

node.js - 从内存中释放大 Node 模块