subprocess派生返回NaN

我想了解node.js中的subprocess模块,我创build了一个具有代码的父文件:

var spawn=require("child_process").spawn; var child=spawn("node",['plus_one.js']); setInterval(function(){ //var number=Math.floor(Math.random()*10000); var number=10; child.stdin.write(number + "\n"); child.stdout.once("data",function(data){ console.log("Child replied to "+number + " with " + data); }) },1000); child.stderr.on("data",function(data){ //process.stdout.write(data); console.log("error"+data) }) 

子文件看起来像这样:

 process.stdin.resume(); process.stdin.on("data",function(data){ var number; try{ number = parseInt(data.toString(), 10); number+=1; process.stdout.write(number+"\n"); } catch(err){ process.stderr.write(err.message+"lol"); } }) 

如果我只执行子文件它工作正常,但是当我执行主文件它总是返回NaN ; 这是为什么?

也作为即时通讯试图了解它,我不明白之间的区别child_process.spawn.execspawn返回stream,所以它具有标准input/标准输出,而exec返回缓冲区 ,这是否意味着.exec不能与子文件通信(和反之亦然)除了传递variables与选项/ env对象在它吗?

对你的代码进行一些调整,现在为我工作:

 var spawn = require("child_process").spawn; var child = spawn("node", ['plus_one.js']); var number = 10; setInterval(function () { child.stdin.write(number++ + "\n"); child.stdout.once("data", function (data) { console.log("Child replied to " + number + " with " + data); }); }, 1000); child.stderr.on("data", function (data) { //process.stdout.write(data); console.log("error" + data) }); 

变化:

  1. setInterval()函数上使用适当的支撑。
  2. 在适当的地方使用.once() ,所以事件处理程序不会堆积。
  3. 移动setInterval()作用域之外的numbervariables,以便它可以保持一个调用的值到下一个。