Node.js中向Spawn出的线程传递stdin数据

在Node.js中提供了“child_process”模块,其中的spawn是一个非常有用的工具。利用这个工具能够打开一个子进程,并且可以接管这个进程的stdio数据。

代码如下:

var spawn = require('child_process').spawn('./a.out',{stdio:'pipe','pipe','pipe'});  
var out="";  
var err="";

spawn.stdout.on('data', function(data){  
    out+=data;
});

spawn.stderr.on('data', function(data){  
    err+=data;
});

spawn.on('exit', function(code, signal){  
        console.log('out:\n'+out);
        console.log('err:\n'+err);
        console.log('child process exit, code:' + code + '\tsignal:' + signal);
});

setTimeout(function(){  
    spawn.stdin.end('5 8');
},0);

而a.out的代码如下:

#include <iostream>
int main(){  
    int a,b;
    std::cin>>a>>b;
    std::cout<<a*b<<std::end;;
}

其中非常需要注意的一个坑,就是在向子进程的stdin传递数据的时候,可以使用write。但由于cin需要用户输入回车,或者终止输入流导致输入流强制flush,才会将数据传递给子进程。也就是说单独写spawn.stdin.write('5 8');没有效果,而需要写成spawn.stdin.write('5 8\n');

Friskit

继续阅读此作者的更多文章