当child_process中的exec shell时,child_process中的stdout无法在stdin之前输出右行

时间:2014-04-16 13:02:58

标签: javascript node.js

prompt.js:

var inquirer = require("inquirer");

console.log("Hi, welcome to Node Pizza");

var questions = [{
    type: "confirm",
    name: "toBeDelivered",
    message: "Is it for a delivery",
    default: false
}];

inquirer.prompt( questions, function( answers ) {
    console.log("\nOrder receipt:");
    console.log( JSON.stringify(answers, null, "  ") );
});

index.js:

var childProcess = require('child_process');
var cp = childProcess.exec('node prompt.js', function (err, stdout, stderr) {
    console.log(stdout);
    console.log(stderr);

    if (err) {
        console.log('exec error: ' + error);
    }
});

process.stdin.pipe(cp.stdin);

在windows7 x64 git shell中执行命令(node v0.10.26):

node index.js

你可以看到shell没有输出任何内容并等待读取输入。

为什么在读取输入之前输出如“Hi,welcome to Node Pizza”?

1 个答案:

答案 0 :(得分:1)

您应该使用child_process.spawn()而不是child_process.exec(),因为exec()会缓冲输出并等待进程退出。