簡體   English   中英

如何使用模塊child_process在Node.js中實現一進一出

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM