Page 331 - Браун Э. - Изучаем JavaScript. Руководство по созданию современных веб-сайтов - 2017
P. 331
подробная информация по этой теме приведена в официалыюй доку
e
s
ментации (https : / /nodej . o r g / a p i / c hild_proc s s . html#child _
proce s _ child _process fork_ modulepath _args _ options).
s
Поскольку функция ехес является наиболее общей и наименее требовательной,
в этой главе мы будем использовать ее.
В демонстрационных целях мы выполним команду dir, которая отображает
список содержимого каталога (хотя пользователям Unix более знакома команда l s ,
в большинстве систем Unix она равнозначна команде dir).
const ехес = require ( ' child_process ' ) . е хес;
i
exec ( ' d r ' , function ( e rr, s t dout, stderr) {
if ( e rr) return console . error ( ' Oшибкa при запуске "dir" ' ) ;
stdout = stdout . t oString ( ) ; / / преобразует Buffer в строку
t
console . l og ( stdou ) ;
stderr = stderr . toString ( ) ;
if ( s t derr ! = = ' ' ) {
console . e rror ( ' Oшибкa : ' ) ;
r
console . error ( s tder ) ;
} ) ;
Поскольку функция ехес запускает системную оболочку, мы не должны указы
вать путь к каталогу, где хранится выполняемый файл. Чтобы вызвать определенную
программу, которая обычно недоступна из оболочки вашей системы, необходимо
указать полный путь к ее исполняемому файлу.
Функции обратного вызова метода ехес помимо признака ошибки передается два
s
объекта типа Buffer - один для t dout (стандартный поток вывода программы)
и другой для s t derr (стандартный поток вывода ошибок, если они есть). В этом при
e
мере, поскольку мы не предусматриваем вывод на устройство std r r, мы сначала
проверяем значение первого аргумента на предмет возникновения ошибки в процес
се запуска программы, а затем выводим полученные результаты на консоль.
Функции ехес можно передать опциональный объект options, который позво
ляет задать рабочий каталог, переменные окружения и т.д. Более подробная инфор
мация по этой теме приведена в официальной документации (https : / nod j s . org/
/
e
api/ child _process . html).
Обратите внимание на способ, которым мы импортируем функцию
s
ехес. Вместо того чтобы импортировать модуль child _proce s , ис
'
s
пользуя const child _process = req i r e ( c h i l d _proce s ' ) , а затем
u
s
вызывать метод ехес как child_proce s . ехес, мы непосредственно
используем псевдоним ехес. Вы можете пользоваться любым вариан
том, но тот способ, которым мы это сделали, весьма распространен.
334 Глава 20. Платформа Node

