簡體   English   中英

NodeJS:在運行child_process時使用戶輸入成為可能

[英]NodeJS: Make it possible for user input when running child_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')嘗試了上面的代碼。

問題 :還有其他方法可以確保我可以觸發腳本,並且如果返回提示並要求輸入,可以鍵入並輸入,腳本將繼續嗎?

從Facebook我得到了使用cross-spawn而不是child_process

羅伯特·哈里托諾夫Robert Haritonov)

使用交叉生成: spawn('bower', bowerCommand, {stdio:'inherit'}).on('close', function () {});

這工作得很好,並提供了我所需要的行為。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM