2015-12-04 120 views
1

我是Node.js的新手,但對C++和Javascript並不陌生。我將使用節點製作一個C++工具,但是我面臨一個問題,當C++程序調用std::cin時,我不知道如何將數據從節點進程發送到C++進程。如何與來自Node.js流程的C++程序輸入流進行交互?

看到這個代碼(MAIN.EXE):

int main() { 
    int a, b, c; 
    cout << "Enter 3 numbers: "; 
    cin >> a >> b >> c; 
    cout << "Total: " << (a + b + c) << endl; 
    return 0; 
} 

在我的javascript代碼,我用child_process.spawn調用MAIN.EXE,我知道我可以使用事件'data'得到的消息"Enter 3 numbers: ",但如何我是否讓節點自動輸入a,bc並最終完成main.exe?

UPDATE:

我的Javascript代碼(我不知道哪些事件可以使用,所以我使用'data'寫數據)

var spawn = require('child_process').spawn; 
var child = spawn('main.exe'); 
child.stdout.on('data', (data) => { 
    console.log(data); 
    child.stdout.end('12 34 56'); 
}); 
child.on('close', (code) => console.log('Exit code: ' + code)); 
+0

你嘗試過什麼? Nodejs應該能夠將/ pipe寫入你產生的進程。 –

+0

@AndyM'pipe'是一個'writable'的方法,我不知道如何應用這個,我只是用'child.stdout.write'和'child.stdout.end'嘗試過,但沒有一個能工作。 – DMaster

+0

你可以發佈一些你正在嘗試的JavaScript嗎?管道輸入就像是說'echo'1 2 3「| 。/ main.exe'在命令行上。 –

回答

2

兩件事情,

  • 您的子進程在cout << "Enter 3 numbers: ";之後沒有刷新,因此data事件永遠不會被觸發。 (編輯:再次讀你的問題,似乎數據事件正在被觸發.Windows下的緩衝機制可能與我在Linux上使用的緩衝機制不同,我將在這裏留下以防萬一:)
  • 您需要寫入stdin而不是stdout的子進程。

試試這個爲你的JavaScript代碼來代替:

var spawn = require('child_process').spawn; 
var child = spawn('main.exe'); 

child.stdin.end('12 34 56'); 
child.stdout.on('data', (data) => { 
    console.log(data); 
}); 
child.on('close', (code) => console.log('Exit code: ' + code)); 
+0

如果退出代碼爲空,該怎麼辦? – wadie