В node.js я хотел бы найти способ получить вывод команды терминала Unix. Есть какой-либо способ сделать это?
function getCommandOutput(commandString){
// now how can I implement this function?
// getCommandOutput("ls") should print the terminal output of the shell command "ls"
}
node.js
shell
command-line-interface
Андерсон Грин
источник
источник
Ответы:
Так я делаю это в проекте, над которым работаю сейчас.
Пример: получение пользователя git
источник
stdout
если возникнет ошибка. Надеюсь, детерминированный и задокументированный.Вы ищете child_process
Как указал Ренато, сейчас есть несколько синхронных пакетов exec, см. Sync-exec, который может быть больше тем, что вы ищете. Однако имейте в виду, что node.js разработан как однопоточный высокопроизводительный сетевой сервер, поэтому, если вы хотите использовать его для этого, держитесь подальше от чего-то вроде sync-exec, если вы не используете его только во время запуска. или что-то.
источник
Sync
методы, изначально доступные, даже в этом случае ИМХО, этого следует избегатьЕсли вы используете node позже 7.6 и вам не нравится стиль обратного вызова, вы также можете использовать
promisify
функцию node-util с,async / await
чтобы получить команды оболочки, которые читаются чисто. Вот пример принятого ответа с использованием этой техники:Это также дает дополнительное преимущество в виде возврата отклоненного обещания при неудачных командах, что может быть обработано
try / catch
внутри асинхронного кода.источник
{ stdout: string, stderr: string }
в результате заawait exec(...)
return { name: name.stdout.trim(), email: email.stdout.trim() }
.Благодаря ответу Ренато я создал действительно простой пример:
Он просто напечатает ваше глобальное имя пользователя git :)
источник
Требования
Для этого потребуется Node.js 7 или новее с поддержкой Promises и Async / Await.
Решение
Создайте функцию-оболочку, которая использует обещания для управления поведением
child_process.exec
команды.Объяснение
Используя промисы и асинхронную функцию, вы можете имитировать поведение оболочки, возвращающей результат, не впадая в ад обратных вызовов и с довольно аккуратным API. Используя
await
ключевое слово, вы можете создать сценарий, который легко читается, но при этом может выполнять свою работуchild_process.exec
.Пример кода
использование
Пример вывода
Попробуйте онлайн.
Repl.it .
Внешние ресурсы
Обещания .
child_process.exec
.Node.js поддержка таблицы .
источник