同类问题:https://stackoverflow.com/questions/39324623/child-process-stdout-and-stderr-column-sizes-in-node-js
使用node的exec来执行top -c 命令,如果有部分进程的COMMAND很长,会发现得到的stdout显示不全,最右侧一定列数之外的内容被截断了,并在末尾显示“+”。
这是因为node的child_process库内部调用的终端,其列数有默认值。当stdout列数很多时,终端仍显示有限列数,内容就显示不全了。
child_process不允许开发者控制终端。我们可以寻求其他库代替。
npm上的pty、child_pty都可以做到控制终端。
比如child_pty,可以如下执行指令:
var child_pty = require('child_pty');
var child = child_pty.spawn('/bin/sh', []);
child.stdout.on('resize', function() {
console.log('New columns: ' + this.columns);
console.log('New rows: ' + this.rows);
}).pipe(process.stdout);
child.stdout.resize({ columns: 160, rows: 50});
child.stdin.write('top -bn 1 -c | head -n 50\n');
child.stdin.write('exit\n');
可见,我们先修改终端列数为160,然后再执行命令。这样打印出来的结果最大列数就是160,显示内容更全了。











网友评论