同類(lèi)問(wèn)題:https://stackoverflow.com/questions/39324623/child-process-stdout-and-stderr-column-sizes-in-node-js
使用node的exec來(lái)執(zhí)行top -c 命令,如果有部分進(jìn)程的COMMAND很長(zhǎng),會(huì)發(fā)現(xiàn)得到的stdout顯示不全,最右側(cè)一定列數(shù)之外的內(nèi)容被截?cái)嗔?,并在末尾顯示“+”。
這是因?yàn)閚ode的child_process庫(kù)內(nèi)部調(diào)用的終端,其列數(shù)有默認(rèn)值。當(dāng)stdout列數(shù)很多時(shí),終端仍顯示有限列數(shù),內(nèi)容就顯示不全了。
child_process不允許開(kāi)發(fā)者控制終端。我們可以尋求其他庫(kù)代替。
npm上的pty、child_pty都可以做到控制終端。
比如child_pty,可以如下執(zhí)行指令:
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');
可見(jiàn),我們先修改終端列數(shù)為160,然后再執(zhí)行命令。這樣打印出來(lái)的結(jié)果最大列數(shù)就是160,顯示內(nèi)容更全了。