当执行child_process中的shell时,child_proccess中的stdout不能在stdin之前输出右

The stdout in child_process cannot output right row before stdin when exec shell in child_process

本文关键字:中的 child stdin 输出 不能 process 执行 shell proccess stdout      更新时间:2023-09-26

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(节点v0.10.26)中执行命令:

node index.js

您可以看到,shell什么也不输出,正在等待读取输入。

为什么像"嗨,欢迎来到Node Pizza"这样的输出在读取输入之前没有输出?

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