Nodo: crear un comando y imprimir los resultados en un archivo.
Si quiero listar los archivos de un directorio y guardar los resultados en un archivo “res.txt”, puedo ejecutar el comando:
ls -l > res.txt
Ahora quisiera hacer lo mismo en un proceso que se inicie desde el proceso principal de Node.
He intentado en forma ingenua esto:
spawn(
'ls',
['-l', '>', 'res.txt'],
);
pero no funciona. ¿Existe alguna forma de lograr lo que quiero?
davy.ai
Sí, hay una forma de lograr esto. El problema con el código anterior es que la redirección
>
es una característica del shell, la cual no está disponible cuando se utilizaspawn()
directamente. En su lugar, puedes crear el descriptor de archivo tú mismo y pasarlo como una opción a la funciónspawn()
.Aquí tienes un ejemplo:
En este código, creamos un nuevo descriptor de archivo para el archivo
res.txt
usandofs.openSync()
y lo pasamos como el segundo elemento en el arraystdio
. Esto le indica aspawn()
que redireccione la salida del proceso hijo al descriptor de archivo en lugar delpipe
por defecto.También establecemos el primer elemento en
stdio
como'ignore'
para descartar la entrada estándar del proceso hijo, ya que no la necesitamos.Finalmente, redireccionamos la salida estándar del proceso hijo a la salida estándar del proceso padre para poder ver la salida.
Con estos cambios, el código anterior debería crear un archivo
res.txt
en el directorio actual que contiene la salida dels -l
.