【问题标题】:Capture continous output from a process捕获流程的连续输出
【发布时间】:2012-12-10 16:20:02
【问题描述】:

我有一个期望脚本,它对另一个盒子执行无密码 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

我该如何解决这个问题?

编辑::

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

【问题讨论】:

    标签: node.js


    【解决方案1】:

    看起来 spawn 是要走的路,因为它意味着处理流,而 exec 的最大缓冲区为 200k。

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

    【讨论】:

    • 我尝试添加 process.setMaxListeners(0) 但仍然得到相同的结果。我的 NodeJS 版本是 v0.8.15。即使它是一个警告 - 但我没有在标准输出中获取数据 - 函数 child.stdout.on('data', function (data){ }); 中的记录器; - 不会在控制台中打印。
    猜你喜欢
    • 1970-01-01
    • 2023-03-10
    • 2015-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-07
    相关资源
    最近更新 更多