在Node.js中子进程的标准输出和标准错误列大小

3

我希望能够监控来自Node中的子进程的实时数据。使用以下代码片段,我可以毫无问题地完成这项任务。

var fs = require('fs');
var spawn = require('child_process').spawn;

(function(){

  "use strict";

  var processMonitor, processListen, processDeauth;

  var parseStreamDataIn = function(data) {

    var str = data.toString('utf8');
    console.log(str);

  };

  var init = function() {

    processMonitor = spawn('trafficmon' , ['-w'], {'shell': '/bin/bash'});

    processMonitor.stdout.on('data', function (data) {
      //trafficmon uses stderr, nothing needed here...
    });
    processMonitor.stderr.on('data', parseStreamDataIn);
    processMonitor.on('close', function (code) {
      processMonitor = null;
    });

  };

  init();

})();

问题在于,parseStreamDataIn()函数返回并记录的数据被截断为每行80个字符(列),导致我需要的一半数据丢失。
以下是trafficmon在终端窗口中运行的示例(已手动扩展为120个字符宽度)。
EC:XX:XX:XX:XX:XX  131        1        0    0   1  128 120614 HTTPS   SSL  cluster1.xxxxx.com

以下是我的Node脚本示例,运行相同的命令并将数据记录到相同大小的终端窗口中。

EC:XX:XX:XX:XX:XX  131        1        0    0   1  128 120614 HTTPS   SSL  clus

如您所见,字符串的尾部被截断了。

有没有办法让我的子进程 shell 返回每行超过 80 列?

1个回答

4

pty.js 允许您指定诸如列数之类的内容。

var pty = require('pty.js');

var term = pty.spawn('bash', [], {
  name: 'xterm-color',
  cols: 80,
  rows: 30,
  cwd: process.env.HOME,
  env: process.env
});

term.on('data', function(data) {
  console.log(data);
});

term.write('ls\r');
term.resize(100, 40);
term.write('ls /\r');

console.log(term.process);

请查看npm上的node-pty软件包:https://www.npmjs.com/package/node-pty - derpedy-doo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接