如何与来自 Node.js 进程的 C++ 程序输入流交互?

How to interact with a C++ program input stream from a Node.js process?

我是 Node.js 的新手,但我不是 C++ 和 Javascript 的新手。我打算使用节点制作一个 C++ 工具,但我遇到了一个问题,当 C++ 程序调用时 std::cin,我不知道如何将数据从节点进程发送到 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: " ,但是如何让节点自动进入abc最后完成main.exe?

更新:

我的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));

两件事,

  • 您的子进程在 cout << "Enter 3 numbers: "; 之后不会刷新,因此永远不会触发 data 事件。 (编辑: 再次阅读您的问题,似乎触发了数据事件。Windows 下的缓冲机制可能与我在 [=29] 上习惯的不同=]。我会把它留在这里以防万一:)
  • 您需要为子进程写入 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));