如何刷新nodejs child_process stdin.write

时间:2015-12-14 10:27:45

标签: node.js

我需要在服务器端为客户端运行'C'程序。这个程序可以互动 我正在使用Node.js child_process类。但我在这里看到一个问题:因为我需要保持程序交互,所以会在客户端和node.js服务器之间来回交换消息。

1.program说:输入x的值:
将此消息发送给客户端并获取一些值作为输入
2.当Nodejs服务器从客户端接收输入时,它执行child_process.stdin.write

但问题是程序直到我标记流的结尾才执行。有什么可以解决这个问题?
就像在用户可用时将值刷新到程序一样。

更新:

test1.c
    的#include

int main() {

int x, y;

printf("Enter x : ");
fflush(stdout);
scanf("%d", &x);

printf("Enter y : ");
fflush(stdout);
scanf("%d", &y);

printf("Value entered y is %d\n", y);
printf("Value entered x is %d", x);
}

编译上面的代码以生成可执行文件a.out

var spawn = require('child_process').spawn;
var count = 0;
var exec = spawn('./a.out');


exec.on('error', function (err){
   console.log("Error" + err );
});

exec.stdout.on('data', function(data){
    console.log("in stdout.on.data : " + data.toString());
    if (count == 0) {
        exec.stdin.write('44\n');
        count++;
    }
    else if (count == 1) {
        exec.stdin.write('54');
        count++;
    }
    if (count == 2) {
        exec.stdin.end();
    }

});

exec.stderr.on('data', function(data) {
    console.log("in stderr.on.data : " + data);
});

exec.on('close', function (code) {
    if (code != 0) {
        console.log("Program ended with a error code : " + code);
    }

});

在上面的node.js代码中,如果我评论exec.stdin.end();它不起作用,它会等到流关闭。我该如何解决这个问题?因为我希望客户能够进行持续的交互,所以我很难预测何时结束流。

1 个答案:

答案 0 :(得分:3)

你忘了“按回车”。

exec.stdin.write('54' + "\n");
OR
exec.stdin.write("54\n");

您还可以查询一下Quotes in JavaScript