2016-09-05 1 views
1

Я хочу отслеживать данные реального времени, поступающие из дочернего процесса в узле. Я могу сделать это без проблем со следующим фрагментом кода.Размеры дочерних процессов stdout и stderr в Node.js

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 

Как вы можете видеть, хвостовой конец струны отрубается.

Есть ли способ сообщить, что моя дочерняя оболочка процесса возвращает более 80 столбцов в строке?

ответ

3

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

Это именно то, что мне нужно, спасибо! –