【问题标题】:Child process stdout and stderr column sizes in Node.jsNode.js 中的子进程 stdout 和 stderr 列大小
【发布时间】:2016-09-05 05:55:06
【问题描述】:

我想监控来自 Node.js 中子进程的实时数据。我可以使用以下代码 sn-p 毫无问题地做到这一点。

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 列?

【问题讨论】:

    标签: node.js bash shell process pipe


    【解决方案1】:

    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);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-04-06
      • 2011-11-01
      • 1970-01-01
      • 2015-08-18
      • 2011-07-07
      • 2020-06-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多