Em um node.js, gostaria de encontrar uma maneira de obter a saída de um comando de terminal Unix. Há alguma maneira de fazer isso?
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
Anderson Green
fonte
fonte
Respostas:
É assim que faço em um projeto em que estou trabalhando agora.
Exemplo: Recuperando o usuário git
fonte
stdout
se houver um erro. Esperançosamente determinístico e documentado.Você está procurando child_process
Como apontado por Renato, existem alguns pacotes exec síncronos por aí agora também, veja sync-exec que pode ser mais o que você está procurando. Lembre-se, porém, de que o node.js foi projetado para ser um servidor de rede de alto desempenho com thread único, então, se é para isso que você está procurando, fique longe de coisas do tipo sync-exec, a menos que você o use apenas durante a inicialização ou alguma coisa.
fonte
Sync
métodos nativamente disponíveis, embora IMHO deva ser evitadoSe você está usando o node posterior a 7.6 e não gosta do estilo de retorno de chamada, você também pode usar a
promisify
função do node-util comasync / await
para obter comandos shell que sejam lidos de forma limpa. Aqui está um exemplo de resposta aceita, usando esta técnica:Isso também tem o benefício adicional de retornar uma promessa rejeitada em comandos com falha, que pode ser tratada
try / catch
dentro do código assíncrono.fonte
{ stdout: string, stderr: string }
como resultado paraawait exec(...)
return { name: name.stdout.trim(), email: email.stdout.trim() }
.Graças à resposta do Renato, criei um exemplo realmente básico:
Ele apenas imprimirá seu nome de usuário git global :)
fonte
Requisitos
Isso exigirá Node.js 7 ou posterior com suporte para Promises e Async / Await.
Solução
Crie uma função de wrapper que aproveite as promessas de controlar o comportamento do
child_process.exec
comando.Explicação
Usando promessas e uma função assíncrona, você pode imitar o comportamento de um shell retornando a saída, sem cair em um inferno de callback e com uma API bem organizada. Usando a
await
palavra - chave, você pode criar um script de fácil leitura e, ao mesmo tempo, realizar o trabalhochild_process.exec
.Amostra de código
Uso
Saída de amostra
Experimente online.
Repl.it .
Fontes externas
Promessas .
child_process.exec
.Mesa de apoio Node.js .
fonte