Node使用child_process獲取stdout顯示不全問(wèn)題:使用pty解決

同類(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)容更全了。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀(guān)點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容