美文网首页
Node使用child_process获取stdout显示不全问

Node使用child_process获取stdout显示不全问

作者: 平仄_pingze | 来源:发表于2018-07-17 11:33 被阅读308次

同类问题: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,显示内容更全了。

相关文章

网友评论

      本文标题:Node使用child_process获取stdout显示不全问

      本文链接:https://www.haomeiwen.com/subject/keywpftx.html