将输入数据发送到节点.js中的子进程
Sending input data to child process in node.js
我正在编写代码以在node.js环境中创建在线c ++编译器。使用spawn
函数,我创建了一个子进程,该子进程将编译代码并执行它并将输出发送回用户。但是我需要将输入发送到正在运行的c ++程序。我用了child.stdin.write('data');
用于向孩子发送数据,但我认为程序中cin
没有接收输入。
请帮助我将输入发送到正在运行的 c++ 代码。
谢谢。
1.使用输入数据创建文件。
2.创建打开输入文件ReadStream
。
3.用childprocess.stdin
管道管道ReadStream
。
file=fs.createReadStream('input.txt',{encoding:'utf8'});
file.pipe(childprocess.stdin);
这对我有用.
如果你想
传递消息,你可能应该使用集群或分叉......如果您这样做,Node 将为您设置 IPC,以便能够通过 process.send 进行通信
或者,您可以使用发布/订阅系统进行通信通道(Redis 非常适合此),如果您需要跨服务器通信,这也是您最好的选择。
下面是一个较旧的工作脚本示例...
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);
}
}
相关文章:
- 如何通过子进程连接Java应用程序后在node.js中编写文件
- 节点.js子进程中的运行函数
- 如何将画布对象从子进程流式传输回 Node.js
- 在 Node.js 中使用 Jasmine 测试子进程发送
- 如何在 node.js 中关闭子进程的 stdio 管道
- 使用 node.js (子进程) 运行 shell 脚本
- 将输入数据发送到节点.js中的子进程
- 如何在 Debian 上通过 node.js 中的引用变量停止子进程
- Node.js为什么不立即启动子进程
- 通过Node.js子进程关闭CS:GO专用服务器
- 如何重新启动Node.js子进程
- 如何使用node.js查看phantomjs子进程的stdout
- Node.js分离的子进程被调用为交互式前台进程
- Node.js的子进程套接字写入在Chrome&FF
- Node.js -如何防止被中断的子进程存活
- node.js中父/子进程之间的顺序通信
- 从同一node.js子进程运行多个命令
- 将缓冲区传递给节点.js子进程
- 节点 js 子进程删除多个文件
- Node.js子进程中数据丢失