Me gustaría usar el execSync
método que se agregó en NodeJS 0.12 pero aún tengo el resultado en la ventana de la consola desde la que ejecuté el script Node.
Por ejemplo, si ejecuto un script NodeJS que tiene la siguiente línea, me gustaría ver la salida completa del comando rsync "live" dentro de la consola:
require('child_process').execSync('rsync -avAXz --info=progress2 "/src" "/dest"');
Entiendo que execSync
devuelve la salida del comando y que podría imprimirlo en la consola después de la ejecución, pero de esta manera no tengo salida "en vivo" ...
node.js
child-process
suamikim
fuente
fuente
[0,1,2]
que he usado'inherit'
, que es equivalente[process.stdin, process.stdout, process.stderr]
o[0,1,2]
según los documentosoptions.stdio
documentación: nodejs.org/api/child_process.html#child_process_options_stdio{stdio:'inherit'}
, debe agregar .toString () y luego llamar a console.log manualmente con el resultado. Además, ni siquiera cumple con el requisito de preguntas de ver la salida del comando "en vivo". No creo que sea "mucho más simple", de hecho, no creo que sea más simple en absoluto.Simplemente puedes usar
.toString()
.Esto se ha probado en Node
v8.5.0
, no estoy seguro de las versiones anteriores. De acuerdo con @etov , no funcionav6.3.1
, no estoy seguro sobre el intermedio.fuente
.execSync()
arroja unaError
instancia.A menos que redirija stdout y stderr como sugiere la respuesta aceptada, esto no es posible con execSync o spawnSync. Sin redireccionar stdout y stderr, esos comandos solo devuelven stdout y stderr cuando se completa el comando.
Para hacer esto sin redirigir stdout y stderr, necesitará usar spawn para hacer esto, pero es bastante sencillo:
Utilicé un comando ls que enumera archivos de forma recursiva para que pueda probarlo rápidamente. Spawn toma como primer argumento el nombre del ejecutable que está intentando ejecutar y, como segundo argumento, toma una matriz de cadenas que representan cada parámetro que desea pasar a ese ejecutable.
Sin embargo, si está configurado para usar execSync y no puede redirigir stdout o stderr por alguna razón, puede abrir otro terminal como xterm y pasarle un comando como este:
Esto le permitirá ver qué está haciendo su comando en la nueva terminal, pero aún tendrá la llamada síncrona.
fuente