如何与来自Node.js进程的C ++程序inputstream进行交互?
我是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: "
,但我怎么让节点自动inputa
, 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));
两件事情,
- 你的subprocess在
cout << "Enter 3 numbers: ";
之后不会刷新cout << "Enter 3 numbers: ";
所以data
事件永远不会被触发。 ( 编辑:再次读你的问题,似乎数据事件被触发,在Windows下的缓冲机制可能会不同于我以前在Linux上的,我会留在这里,以防万一:) - 你需要写入到
stdin
而不是stdout
的subprocess。
试试这个你的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));