Necesito en la función node.js
result = execSync('node -v');
eso ejecutará sincrónicamente la línea de comando dada y devolverá todo stdout'ed por ese texto de comando.
PD. La sincronización es incorrecta. Lo sé. Solo para uso personal.
ACTUALIZAR
Ahora tenemos la solución de mgutz que nos da el código de salida, ¡pero no stdout! Todavía estoy esperando una respuesta más precisa.
ACTUALIZAR
mgutz actualizó su respuesta y la solución está aquí :)
Además, como mencionó dgo.a , hay un módulo independiente exec-sync
ACTUALIZACIÓN 2014-07-30
ShellJS lib llegó. Considere que esta es la mejor opción por ahora.
ACTUALIZACIÓN 2015-02-10
¡AL FINAL! NodeJS 0.12 es compatible de execSync
forma nativa.
Ver documentos oficiales
Respuestas:
Node.js (desde la versión 0.12, así que por un tiempo) admite
execSync
:Ahora puede hacer esto directamente:
y hará lo que esperas. (El valor predeterminado es canalizar los resultados de E / S al proceso principal). Tenga en cuenta que también puede hacerlo
spawnSync
ahora.fuente
Ver biblioteca execSync .
Es bastante fácil de hacer con node-ffi . No lo recomendaría para los procesos del servidor, pero para las utilidades de desarrollo en general hace las cosas. Instala la biblioteca.
Script de ejemplo:
[EDITAR junio de 2012: Cómo obtener STDOUT]
fuente
stdout
de esto? Todo lo que puedo obtener es el código de salida del procesoexecSync
no es parte dechild_process
. Creo que debería ser.Utilice el módulo ShellJS .
función ejecutiva sin proporcionar devolución de llamada.
Ejemplo:
fuente
exec()
es intensivo en CPU para procesos largos.const execSync = require('child_process').execSync; code = execSync('node -v');
Hay un excelente módulo para el control de flujo en node.js llamado asyncblock . Si envolver el código en una función está bien para su caso, se puede considerar el siguiente ejemplo:
fuente
exec-sync
offi
en Windows tiene una gran sobrecarga (VC ++, SDK, Python, etc.), pero esto es más ligero.Esto no es posible en Node.js, ambos
child_process.spawn
ychild_process.exec
se construyeron desde cero para ser asíncronos.Para más detalles, consulte: https://github.com/ry/node/blob/master/lib/child_process.js
Si realmente desea tener este bloqueo, coloque todo lo que debe suceder después en una devolución de llamada, o cree su propia cola para manejar esto de manera bloqueante, supongo que podría usar Async.js para esta tarea.
O, en caso de que tenga demasiado tiempo para pasar, piratee en Node.js mismo.
fuente
Esta es la forma más fácil que encontré:
fuente
Solo para agregar que, aunque hay pocos casos de uso donde debería usarlos,
spawnSync
/execFileSync
/execSync
se agregaron a node.js en estos commits: https://github.com/joyent/node/compare/d58c206862dc...e8df2676748efuente
Puedes lograr esto usando fibras. Por ejemplo, usando mi biblioteca de Nodo común , el código se vería así:
fuente
Me acostumbro a implementar
"synchronous"
cosas al final de la función de devolución de llamada. No es muy agradable, pero funciona. Si necesita implementar una secuencia de ejecuciones de línea de comando, debe ajustarseexec
a alguna función con nombre y llamarla recursivamente. Este patrón parece ser utilizable para mí:fuente
Tuve un problema similar y terminé escribiendo una extensión de nodo para esto. Puedes consultar el repositorio de git. ¡Es de código abierto y gratuito y todas esas cosas buenas!
https://github.com/aponxi/npm-execxi
Las instrucciones de uso están en el archivo Léame . ¡No dude en hacer solicitudes de extracción o enviar problemas!
EDITAR:
Sin embargo, aún no devuelve el stdout ... Solo los genera en tiempo real.Lo hace ahora Bueno, lo acabo de lanzar hoy. Tal vez podamos construir sobre eso.De todos modos, pensé que valía la pena mencionarlo.
fuente
npm install
tenga éxito (en otras palabras, como compilaciones de complementos), entonces es bueno ir a la producción. Además de apuntar a diferentes versiones de nodejs, diría que está parcheado para producción, o que es bastante estable. Si hay algún error, puede enviar una solicitud de extracción o publicar un problema en github :)puedes hacer operaciones de shell síncronas en nodejs así:
EDITAR: este ejemplo está destinado a entornos de Windows, ajústelo para sus propias necesidades de Linux si es necesario
fuente
En realidad, tuve una situación en la que necesitaba ejecutar múltiples comandos uno tras otro desde un script de preinstalación package.json de una manera que funcionara tanto en Windows como en Linux / OSX, por lo que no podía confiar en un módulo no básico.
Entonces esto es lo que se me ocurrió:
Puedes usarlo así:
EDITAR: como se señaló, esto en realidad no devuelve la salida ni le permite usar el resultado de los comandos en un programa Node. Otra idea para eso es usar las llamadas de LiveScript. http://livescript.net/
fuente