как вызвать и исполнить бинарные команды из node js

Аватар пользователя Ivan Gagarinov
Ivan Gagarinov
22 декабря 2024

Для начала вам нужно импортировать модуль child_process:

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

Метод exec позволяет запускать команды оболочки и получать их вывод. Он проще в использовании, если вам нужно просто выполнить команду и получить результат.

exec('ls -la', (error, stdout, stderr) => {
    if (error) {
        console.error(`Ошибка: ${error.message}`);
        return;
    }
    if (stderr) {
        console.error(`Ошибка: ${stderr}`);
        return;
    }
    console.log(`Результат: ${stdout}`);
});

Если вы собираетесь работать с потоками данных или ожидаете, что команда будет выводить много данных, лучше использовать spawn. Он позволяет обрабатывать данные по мере их поступления.

const process = spawn('ls', ['-la']);

process.stdout.on('data', (data) => {
    console.log(`Вывод: ${data}`);
});

process.stderr.on('data', (data) => {
    console.error(`Ошибка: ${data}`);
});

process.on('close', (code) => {
    console.log(`Процесс завершён с кодом: ${code}`);
});

Можно передавать аргументы в бинарные команды не только как часть строки, но и в виде массива для spawn, что часто является более безопасным вариантом.

Важно обрабатывать возможные ошибки при выполнении команд. Например, команды могут завершаться с ненулевым кодом, указывающим на ошибку. Это нужно проверять на уровне обработчиков событий или в коллбек-функции exec.

Обратите внимание, что выполнение бинарных команд может быть небезопасным, если вы делаете это с пользовательским вводом. Убедитесь, что вы экранируете входные данные, особенно если они могут быть подвержены инъекциям.

Вот пример, который обрабатывает возможные ошибки и выводит результат выполнения команды:

const { exec } = require('child_process');

const command = 'ls -la'; // Замените на свою команду

exec(command, (error, stdout, stderr) => {
    if (error) {
        console.error(`Ошибка: ${error.message}`);
        return;
    }
    if (stderr) {
        console.error(`Ошибка: ${stderr}`);
        return;
    }
    console.log(`Результат: ${stdout}`);
});
0 0
Познакомьтесь с основами JavaScript бесплатно