如何使用child_process模块在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自动读取,因为"data"监听器。
但对于子进程,输出是一个块,然后当Nodejs读回时,它有时会变成两个或多个块。这不是我想要的。
如何在代码中修复此问题?
当您生成一个子进程时,stdout是一个可读流。当您附加"数据"事件时,流将进入"流动模式",这意味着它将在数据可用时立即返回数据。当你有很多数据时,它会一次一块地返回你的数据。
有几种方法可以解决这个问题:
您可以缓冲所有块,并在"结束"事件触发时输出它们,如下所示:
var output="";
r.stdout.on('data',function(data){
output+=data
}).on('end',function(){
console.log(output);
});
或者,您可以完全删除数据事件侦听器并调用stdout.read().
stdout.read()将在任何时候读取流的所有内容,因此您必须在进程不再输出任何内容时调用它。
相关文章:
- Fire$ng在承诺实现后动画输入
- 如何在文本输入中插入删除图标并实现删除文本
- 如何使用输入字段、文本和提交按钮实现自定义回退功能
- 如何在文本输入字段中实现最后一个没有字母间距的字母
- 如何在Meteor中实现实时搜索,而不会在每个字母后出现文本输入模糊
- 如何使用child_process模块在Nodejs中实现一输入一输出
- 如何更改Chrome'的键盘快捷方式;实现到HTML5语音输入API
- 如何使用javascript/jquery实现用户输入的生活风格
- 如果一个函数的大部分执行是以输入为条件的,那么下面哪一种是更好的实现方式
- Yii2实现输入字段的客户端唯一验证
- 在输入时实现有角度的材料自动完成搜索
- Javascript:如何实现;输入/返回键”;以保存值
- 我如何实现html输入表单没有后端
- 实现GUI输入数学公式的简单方法
- 如何实现迭代的、填充数组的Angular 2输入
- JavaScript的输入需要实现
- 如何使用JQuery动态创建输入元素实现keyup函数
- 如何使用格式实现输入
- 我无法使用javascript实现动态输入
- 如何最大限度地实现用户友好的日期输入