NodeJS响应shell提示

时间:2018-11-23 21:27:50

标签: node.js raspberry-pi prompt child-process

我从NodeJS应用程序启动Shell脚本。
在某个时候,shell脚本会要求用户输入(是/否确认)。
节点应用程序在RaspberryPi上运行,并且确认是通过物理按钮(没有键盘)完成的,因此“提示答案”必须通过代码完成。
我试过了:

childProcess.stdin.write("y\n");
childProcess.stdin.end();

但什么也没发生。
为了清楚起见,我已经测试过在控制台上手动输入“ y”,并且该脚本可以正常工作,

这是我的简单代码:

节点应用:

var Gpio = require('pigpio').Gpio;
class Main {
  constructor() {
    this.prompt = false;
    const button = new Gpio(17, {
      mode: Gpio.INPUT,
      pullUpDown: Gpio.PUD_DOWN,
      edge: Gpio.EITHER_EDGE
    });
    button.on('interrupt', (level) => {
      if (level == 1) {
        this.onButtonPress();
      } else if (level == 0) {
        this.onButtonRelease();
      }
    });
    this.childProcess = require('child_process').spawn('sudo', ['miLazyCracker']);
    this.childProcess.stdout.on('data', (dataBuffer) => {
      var data = dataBuffer.toString();
      console.log(data);
      if (data.includes("Do you want clone the card?")) {
        this.prompt = true;
      }
    });
  }
  onButtonPress() {

  }
  onButtonRelease() {
    if (this.prompt) {
      this.childProcess.stdin.write("y\n");
      this.childProcess.stdin.end();
      console.log("sent prompt confirmation");
    }
  }
}
new Main();
module.exports = Main;

shell脚本:https://github.com/nfc-tools/miLazyCracker/blob/master/miLazyCracker.sh

这是简单的控制台输出:

[Useless start of the script]

Do you want clone the card? Place card on reader now and press Y [y/n]
sent prompt confirmation

1 个答案:

答案 0 :(得分:1)

问题出在sh脚本本身中,该脚本显然使用了无法从脚本中获取答案的提示方法,我使用常规的read方法对其进行了修改,现在它可以工作了。 感谢您的评论