Node.js中的子进程stdout和stderr列大小

时间:2016-09-05 05:55:07

标签: node.js bash shell process pipe

我想监控来自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

我的节点脚本运行相同命令并将数据记录到相同大小的终端窗口的示例。

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

正如你所看到的,弦的尾端被切断了。

有什么方法可以告诉我的子进程shell每行返回超过80列?

1 个答案:

答案 0 :(得分: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);