NodeJS:运行child_process时可以进行用户输入

时间:2015-02-23 19:35:29

标签: node.js bash maven process

我正在尝试创建一个Node脚本,它会向用户询问几个问题,保存输入并使用答案运行mvn archetype:generate命令来安装他们的环境。

我到达了Maven命令运行的地方。但是当Maven要求用户输入groupId和``这样的值时,我可以输入值,给出[enter],这就是它停止的地方。

它不需要输入和处理它们。它只是像CLI一样显示它,但不接受它们。

以下是一段代码片段,其中包含预先填写的用户输入值:

var spawn = require('child_process').spawn;
var answerCollection = {
  "name": "nameOfMyArchetype", //answer of inquiry
  "version": "1.2.3.4" //answer of inquiry
};
var cmd = "mvn";
var args = [
  "archetype:generate",
  "-DarchetypeArtifactId=" + answerCollection.name,
  "-DarchetypeGroupId=com.backbase.expert.tools",
  "-DarchetypeVersion=" + answerCollection.version
];
var runCmd = function(cmd, args, callback) {

  var child = spawn(cmd, args);

  child.stdin.pipe(process.stdin);
  child.stdout.pipe(process.stdout);

  child.stdout.on('end', function(res) {
    console.log("stdout:end");
    callback(res);
  });

  child.stderr.on('data', function(text) {
    console.log("stderr:data");
    console.log(data);
  });

  child.stderr.on('exit', function(data) {
    console.log("stderr:exit");
    console.log(data);
  });

};

到目前为止,我已使用child_processspawn = require('child_process').spawn('bash')尝试了上述代码。

问题:有没有其他方法可以确保我可以触发一个脚本,如果它返回一个提示并要求输入我可以输入并输入脚本将继续?

1 个答案:

答案 0 :(得分:1)

从Facebook我得到了这个提示,使用cross-spawn,而不是child_process

来自Robert Haritonov

  

使用cross-spawn:spawn('bower', bowerCommand, {stdio:'inherit'}).on('close', function () {});

这非常有效,并提供了我需要的行为。