2014-11-20 50 views
1

我寫代碼來創建一個在線的C++編譯器在node.js中environment.Using spawn功能我創建了一個子進程,這將編譯代碼並執行它,併發送回輸出給用戶。 但我需要將輸入發送到正在運行的C++程序。我用child.stdin.write('data'); 將數據發送到孩子,但我認爲cin在程序不接收輸入。
請幫我將輸入發送到正在運行的C++代碼。
謝謝。發送輸入數據的子進程的node.js

回答

1

你或許應該使用羣集或叉,如果你想傳遞的消息......如果你這樣做,節點將設置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); 
    } 

} 
0

1,創建與輸入數據的文件。
2.創建ReadStream打開輸入文件。
3.Pipe的ReadStreamchildprocess.stdin

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

這對我有效。