2016-09-05 27 views
1

我想監視來自Node中子進程的實時數據。我可以在下面的代碼片段沒有問題的情況下做到這一點。Node.js中的子進程stdout和stderr列大小

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

回答

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

這正是我需要的,謝謝! –

相關問題