【问题标题】:How to interact with a C++ program input stream from a Node.js process?如何与来自 Node.js 进程的 C++ 程序输入流进行交互?
【发布时间】:2016-03-09 12:29:45
【问题描述】:

我是 Node.js 的新手,但我对 C++ 和 Javascript 并不陌生。我打算用node做一个C++工具,但是遇到一个问题,当C++程序调用std::cin时,我不知道如何从node进程向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,@987654327 @和c自动完成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));

【问题讨论】:

  • 你试过什么? Nodejs 应该能够向您生成的进程写入/管道。
  • @AndyM pipewritable 的一种方法,我不知道如何应用它,我只是尝试使用 child.stdout.writechild.stdout.end 但它们都不起作用。
  • 您也可以发布一些您正在尝试的javascript吗?管道输入就像在命令行上说echo "1 2 3" | ./main.exe
  • @AndyM 我贴出来了,实际项目中不会用到,这个代码是用来快速测试的。

标签: javascript c++ node.js io cin


【解决方案1】:

两件事,

  • 您的子进程不会在cout &lt;&lt; "Enter 3 numbers: "; 之后刷新,因此永远不会触发data 事件。 (编辑:再次阅读您的问题,似乎 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));

【讨论】:

    猜你喜欢
    • 2021-09-08
    • 2015-04-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多