subprocessNode.js中的stdout和stderr列大小
我想监视来自Node中subprocess的实时数据。 我可以做到这一点没有问题,下面的代码片段。
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(); })();
问题是,数据被返回并logging在parseStreamDataIn()被削减到每行80个字符(列),留下一半我想失踪的数据。
在terminal窗口中自行运行的trafficmon示例(手动扩展为120个字符)
EC:XX:XX:XX:XX:XX 131 1 0 0 1 128 120614 HTTPS SSL cluster1.xxxxx.com
我的节点脚本运行相同命令并将数据logging到相同大小的terminal窗口中的示例。
EC:XX:XX:XX:XX:XX 131 1 0 0 1 128 120614 HTTPS SSL clus
正如你所看到的那样,弦的尾端被切断了。
有什么办法可以告诉我的subprocessshell每行返回80列以上?
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);