如何与来自 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: "
,但是如何让节点自动进入a
、b
和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));
两件事,
- 您的子进程在
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));
我是 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: "
,但是如何让节点自动进入a
、b
和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));
两件事,
- 您的子进程在
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));