как вызвать и исполнить бинарные команды из node js
Для начала вам нужно импортировать модуль 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}`);
});