Запуск внешних программ

Запустить внешнюю программу и получить результат ее выполнения позволяют функции exec(), execFile() и spawn() из модуля child_process. Импорт функций из модуля:

const { exec, execFile, spawn } = require('child_process');

Функция exec() выполняет команду, переданную в первом параметре. Формат функции:

<ChildProcess> = exec(<Команда>[, <Опции>][, <Функция>])

В параметре <Опции> можно передать объект с опциями. Полный список опций см. в документации. В параметре <Функция> указывается ссылка на функцию, которая будет вызвана при завершении выполнения команды. Функция принимает три параметра. Через первый параметр доступен объект ошибки или значение null. Через второй параметр доступны данные, выведенные в поток stdout, в виде строки или Buffer. Через третий параметр доступны данные, выведенные в поток stderr, в виде строки или Buffer. Объект Buffer возвращается, если опция encoding имеет значение buffer или указана не поддерживаемая кодировка. Функция возвращает объект ChildProcess. Операция выполняется асинхронно.

Пример преобразования изображения из формата JPEG в формат PNG с помощью программы ImageMagick при нажатии кнопки:

document.getElementById('btn1').addEventListener('click', () => {
   exec('C:\\ImageMagick\\convert photo.jpg photo.png', {
      cwd: __dirname,
      timeout: 3000,
      encoding: 'utf8'
   }, (err, stdout, stderr) => {
      if (err) {
         console.log(err);
         return;
      }
      console.log('stdout', stdout);
      console.log('stderr', stderr);
   });
});

Функция execFile() имеет следующий формат:

<ChildProcess> = execFile(<Путь к файлу>[, <Аргументы>][, <Опции>][,
                          <Функция>])

В первом параметре указывается путь к запускаемому файлу. Обратите внимание: нельзя запустить файлы с расширениями bat и cmd, но можно запустить exe. Аргументы, передаваемые программе, задаются в виде массива строк во втором параметре. В параметре <Опции> можно передать объект с опциями. Полный список опций см. в документации. В параметре <Функция> указывается ссылка на функцию, которая будет вызвана при завершении выполнения команды. Функция принимает три параметра. Через первый параметр доступен объект ошибки или значение null. Через второй параметр доступны данные, выведенные в поток stdout, в виде строки или Buffer. Через третий параметр доступны данные, выведенные в поток stderr, в виде строки или Buffer. Объект Buffer возвращается, если опция encoding имеет значение buffer или указана не поддерживаемая кодировка. Функция возвращает объект ChildProcess. Операция выполняется асинхронно.

Пример:

document.getElementById('btn2').addEventListener('click', () => {
   execFile('C:\\ImageMagick\\convert', ['photo.jpg', 'photo.png'], {
      cwd: __dirname,
      timeout: 3000,
      encoding: 'utf8'
   }, (err, stdout, stderr) => {
      if (err) {
         console.log(err);
         return;
      }
      console.log('stdout', stdout);
      console.log('stderr', stderr);
   });
});

Функции exec() и execFile() ограничены объемом получаемых данных. Если объем превышает значение опции maxBuffer, то будет ошибка. Функция spawn() лишена этого недостатка. Формат функции:

<ChildProcess> = spawn(<Команда>[, <Аргументы>][, <Опции>])

В первом параметре указывается команда или путь к запускаемому файлу. Аргументы, передаваемые программе, задаются в виде массива строк во втором параметре. В параметре <Опции> можно передать объект с опциями. Полный список опций см. в документации. Функция возвращает объект ChildProcess. Операция выполняется асинхронно.

Получим EXIF-данные из изображения IMG_5377.cr2:

document.getElementById('btn3').addEventListener('click', () => {
   let cp = spawn('C:\\ImageMagick\\identify',
                  ['-verbose', 'IMG_5377.cr2'], { cwd: __dirname });
   cp.stdout.on('data', data => {
      console.log(data.toString());
   });
   cp.stderr.on('data', data => {
      console.log('stderr', data.toString());
   });
   cp.on('error', e => {
      console.log('error', e);
   });
   cp.on('close', code => {
      console.log('close', code);
   });
});

Обработчик события data будет вызываться несколько раз для каждой порции данных.

Примечание

Учебник по Electron js
Учебник по Electron js в формате PDF

Помощь сайту

ЮMoney (Yandex-деньги): 410011140483022

ПАО Сбербанк:
Счет: 40817810855006152256
Реквизиты банка:
Наименование: СЕВЕРО-ЗАПАДНЫЙ БАНК ПАО СБЕРБАНК
Корреспондентский счет: 30101810500000000653
БИК: 044030653
КПП: 784243001
ОКПО: 09171401
ОКОНХ: 96130
Скриншот реквизитов