En un node.js, me gustaría encontrar una manera de obtener el resultado de un comando de terminal Unix. ¿Hay alguna forma de hacer esto?
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
fuente
fuente
Respuestas:
Así es como lo hago en un proyecto en el que estoy trabajando ahora.
Ejemplo: recuperando el usuario de git
fuente
stdout
si hay un error. Con suerte determinista y documentado.Estás buscando child_process
Como señaló Renato, ahora también hay algunos paquetes ejecutivos síncronos, consulte sync-exec que podrían ser más lo que está buscando. Sin embargo, tenga en cuenta que node.js está diseñado para ser un servidor de red de alto rendimiento de un solo subproceso, por lo que si para eso está buscando usarlo, manténgase alejado de las cosas de sync-exec a menos que solo lo esté usando durante el inicio o algo.
fuente
Sync
métodos disponibles de forma nativa, aun así en mi humilde opinión debería evitarseSi está usando un nodo posterior a 7.6 y no le gusta el estilo de devolución de llamada, también puede usar la
promisify
función de node-util conasync / await
para obtener comandos de shell que se lean limpiamente. Aquí hay un ejemplo de la respuesta aceptada, usando esta técnica:Esto también tiene el beneficio adicional de devolver una promesa rechazada en comandos fallidos, que se pueden manejar
try / catch
dentro del código asíncrono.fuente
{ stdout: string, stderr: string }
como resultado de laawait exec(...)
return { name: name.stdout.trim(), email: email.stdout.trim() }
.Gracias a la respuesta de Renato, he creado un ejemplo realmente básico:
Simplemente imprimirá su nombre de usuario global de git :)
fuente
Requisitos
Esto requerirá Node.js 7 o posterior con soporte para Promises y Async / Await.
Solución
Cree una función contenedora que aproveche las promesas para controlar el comportamiento del
child_process.exec
comando.Explicación
Usando promesas y una función asincrónica, puede imitar el comportamiento de un shell que devuelve la salida, sin caer en un infierno de devolución de llamada y con una API bastante ordenada. Con la
await
palabra clave, puede crear una secuencia de comandos que se lea fácilmente, sin dejar de poder realizar el trabajochild_process.exec
.Muestra de código
Uso
Salida de muestra
Pruébelo en línea.
Responde .
Recursos externos
Promesas .
child_process.exec
.Node.js mesa de apoyo .
fuente