在Node.js中完全交互子进程

时间:2016-07-16 07:13:38

标签: javascript node.js process ecmascript-6

我有一个使用命令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代码以与应用程序交互,而不是相反。当我使用命令提示符执行外部应用程序时,我会在每个输入行后收到输出,因此该应用程序没有问题 任何想法如何使完全互动的子进程?

1 个答案:

答案 0 :(得分:0)

你试过fflush吗?

{"data":null,"statusCode":200,"isSuccess":true,"message":"input data is required"}
好吧,你说你不能改变C代码。但在这种情况下,我建议你在节点和节点之间编写另一个C程序(broker.c)。 1.cpp。并从节点调用broker.cpp。