将input数据发送到node.js中的subprocess

我正在编写代码在node.js环境中创build一个在线c ++编译器。使用spawn函数我创build了一个subprocess,它将编译代码并执行它并将输出发回给用户。 但我需要发送input到正在运行的c + +程序。 我用了child.stdin.write('data'); 发送数据给孩子,但我认为程序中的cin没有收到input。
请帮助我将input发送到正在运行的c ++代码。
谢谢。

如果你想传递消息,你应该使用cluster或者fork,如果你这样做的话,node会设置IPC,以便能够通过process.send


或者,您可以使用发布/订阅系统来交stream沟通渠道(Redis适用于此),如果您需要跨服务器进行沟通,这也是您最好的select。


下面是一个较旧的工作脚本的例子…

 var env = process.env.NODE_ENV || 'dev'; var cluster = require("cluster"); //TODO: need to adjust to use domains for this work process.on('uncaughtException', function (err) { console.error('GENERAL EXCEPTION IN %s: %s', process.env.WORKER_TYPE || 'MASTER',err); if (err.stack) console.error(err.stack); if (cluster.isWorker) { //process.send notifies the parent process of the error process.send({ err: { "str": err && err.toString() || "unknown error" ,"message": err && err.message || null ,"stack": err && err.stack || null } }); } process.nextTick(function(){ process.exit(666); }); }); if (cluster.isMaster) startMaster(); if (cluster.isWorker) startWorker(); function startMaster() { createWorker("foo"); createWorker("bar"); } function createWorker(workerType) { var worker = cluster.fork({"WORKER_TYPE":workerType}); //passes environment variables to child worker.on('online',onOnline.bind(null, worker)); worker.on('message',onMessage.bind(null, worker)); worker.on('exit',onExit.bind(null, worker)); worker.workerType = workerType; return worker; // you can use worker.send() to send a message that // will raise a message event in the child } function startWorker() { console.log("Running Worker: %s %s", cluster.worker.id, process.env.WORKER_TYPE); setTimeout(process.exit.bind(process,0), 5000); //close in 5 seconds //you may want to load a specific module based on WORKER_TYPE } function onOnline(worker) { console.log("Worker Online: %s %s", worker.id, worker.workerType); //console.log(arguments); } function onMessage(worker, msg) { if (msg.err) { console.warn("Error From", worker.id, worker.workerType, msg.err); } else { console.log("Message From", worker.id, worker.workerType); } //console.log(arguments); } function onExit(worker, code, signal) { console.log("Worker Exited: %s %s %s %s", worker.id, worker.workerType, code, signal); if (env == 'dev') { //for now just exit the whole thing (dev mode) process.nextTick(function(){ process.exit(1); }); } else { //workers should simply keep working... //fire off a new worker createWorker(worker.workerType); } } 

1.用input数据创build一个文件。
2.创build一个ReadStream打开input文件。
用childprocess.stdinpipe理ReadStream

 file=fs.createReadStream('input.txt',{encoding:'utf8'}); file.pipe(childprocess.stdin); 

这对我有效。

Interesting Posts