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
和.exec
, spawn
返回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) });
变化:
- 在
setInterval()
函数上使用适当的支撑。 - 在适当的地方使用
.once()
,所以事件处理程序不会堆积。 - 移动
setInterval()
作用域之外的number
variables,以便它可以保持一个调用的值到下一个。