NodeJS отвечает на приглашение оболочки - PullRequest
0 голосов
/ 24 ноября 2018

Я запускаю сценарий оболочки из приложения NodeJS.
В определенный момент сценарий оболочки запрашивает ввод данных пользователем (подтверждение Y / N).
Приложение узла работает на 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;

Сценарий оболочки: 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 голосов
/ 25 ноября 2018

Проблема заключалась в самом скрипте sh, который, по-видимому, использует быстрый метод, который не мог получить ответы от скрипта, я изменил его, используя метод обычного чтения, и теперь он работает .. Спасибо за ваши комментарии

...