[英]Fully interacting child process in Node.js
我有一个使用命令gcc 1.cpp -o 1.exe
编译的简单C ++程序。
// 1.cpp
#include <stdio.h>
int main(){
int a = 0;
scanf("%d", &a);
printf("%d", a + 1000);
scanf("%d", &a);
printf("\n%d", a + 1000);
return 0;
}
我的目标是创建Node.js应用程序,该应用程序可以将一个数字传递给1.exe
,然后显示结果,然后将显示的结果作为下一个数字传递。 最后,应用程序必须写入第二个结果,然后关闭。
我在Node.js手册和文档以及其他站点上进行了搜索,但是仍然无法弄清楚如何在Node.js中创建交互式子流程。 以下代码根本不起作用。
var cp = require('child_process');
var proc = cp.spawn(pathToFile);
var n = 0;
proc.stdout.on('data', function(a){
process.stdout.write(a);
if(!n++) proc.stdin.write(a + '\n');
});
proc.stdin.write('1\n');
永远不会到达函数proc.stdout.on(data, ...)
,因为仅当子进程退出时才调用该函数。 问题是因为当第二个数字通过时它将退出,但是在收到第一个结果时第二个通过了。 我已经尝试了cp.spawn
函数中的许多组合和许多选项,但是没有按预期工作。
我想要完全交互式的子进程的原因是因为我想创建Node.js模块,该模块使用需要长时间加载的外部应用程序,所以更简单的方法是保持子进程处于活动状态,并仅通过stdio发送和接收数据。
C ++应用程序只是一个例子。 我想与Node.js进行交互的真实应用程序是我无法编辑的,因此不要指望我更改该应用程序的代码。 我必须修改Node.js代码才能与应用程序交互,反之亦然。 当我在命令提示符下执行外部应用程序时,我在每行输入后都会收到输出,因此该应用程序没有问题。
有什么想法可以使孩子的过程充分互动吗?
你有尝试过脸红吗?
printf("%d", a + 1000);
fflush(stdout);
好的,您说您无法更改C代码。 但在那种情况下,我建议您在node&1.cpp之间编写另一个C程序(broker.c)。 并从节点调用broker.cpp。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.