![](/img/trans.png)
[英]How to get the output of command executed using child_process in nodejs?
[英]How do I realize One Input One Output in Nodejs with the module child_process
我嘗試使R和nodejs相互通信,但是遇到一些問題。 我將用這段代碼進一步解釋
var cp = require('child_process')
var spawn = cp.spawn
var r = spawn("rterm",["--ess" ,"--slave"])
r.stdout.on('data',function(data){
console.log(data.toString())
})
我向子進程發送命令,子進程然后生成大量輸出(在合理的長度內),由於“數據”偵聽器,Nodejs會自動讀取輸出。
但是對於子進程,輸出為一個塊,然后在被Nodejs讀回時,有時會變成兩個或更多塊。 那不是我想要的。
如何在我的代碼中解決該問題?
生成子進程時 ,stdout是可讀流 。 當您附加“ 數據 ”事件時,流將進入“流模式”,這意味着它將在可用時立即返回數據。 當您有大量數據時,它將一次返回一個數據塊。
有兩種方法可以解決此問題:
您可以緩沖所有塊,並在觸發' end '事件時將其輸出,如下所示:
var output="";
r.stdout.on('data',function(data){
output+=data
}).on('end',function(){
console.log(output);
});
或者,您可以完全刪除數據事件偵聽器,然后調用stdout.read() 。
stdout.read()會隨時讀取流的所有內容,因此,當進程不再輸出任何內容時,必須調用它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.