Paso 1: asegúrese de que spawn
se llame de la manera correcta
Primero, revise los documentos para child_process.spawn (comando, argumentos, opciones) :
Inicia un nuevo proceso con el dado command
, con argumentos de línea de comando en args
. Si se omite, el valor args
predeterminado es una matriz vacía.
El tercer argumento se usa para especificar opciones adicionales, que por defecto son:
{ cwd: undefined, env: process.env }
Se usa env
para especificar variables de entorno que serán visibles para el nuevo proceso, el valor predeterminado es process.env
.
Asegúrese de no poner ningún argumento en la línea de comandos command
y toda la spawn
llamada es válida . Proceda al siguiente paso.
Paso 2: identifique el emisor de eventos que emite el evento de error
Busque en su código fuente cada llamada a spawn
, o child_process.spawn
, es decir,
spawn('some-command', [ '--help' ]);
y adjunte un detector de eventos para el evento 'error', de modo que se note el Emisor de eventos exacto que lo está arrojando como 'No controlado'. Después de la depuración, ese controlador puede eliminarse.
spawn('some-command', [ '--help' ])
.on('error', function( err ){ throw err })
;
Ejecute y debería obtener la ruta del archivo y el número de línea donde se registró su escucha de 'error'. Algo como:
/file/that/registers/the/error/listener.js:29
throw err;
^
Error: spawn ENOENT
at errnoException (child_process.js:1000:11)
at Process.ChildProcess._handle.onexit (child_process.js:791:34)
Si las dos primeras líneas siguen siendo
events.js:72
throw er; // Unhandled 'error' event
repita este paso hasta que no lo estén. Debe identificar al oyente que emite el error antes de continuar con el siguiente paso.
Paso 3: asegúrese de que la variable de entorno $PATH
esté configurada
Hay dos escenarios posibles:
- Confía en el
spawn
comportamiento predeterminado , por lo que el entorno de proceso secundario será el mismo que process.env
.
- Usted está explícitamente pasar un
env
objeto a spawn
en el options
argumento.
En ambos escenarios, debe inspeccionar la PATH
clave en el objeto de entorno que utilizará el proceso secundario generado.
Ejemplo para el escenario 1
// inspect the PATH key on process.env
console.log( process.env.PATH );
spawn('some-command', ['--help']);
Ejemplo para el escenario 2
var env = getEnvKeyValuePairsSomeHow();
// inspect the PATH key on the env object
console.log( env.PATH );
spawn('some-command', ['--help'], { env: env });
La ausencia de PATH
(es decir, es undefined
) hará spawn
que se emita el ENOENT
error , ya que no será posible localizar ninguno a command
menos que sea una ruta absoluta al archivo ejecutable.
Cuando PATH
está configurado correctamente, continúe con el siguiente paso. Debe ser un directorio o una lista de directorios. El último caso es el habitual.
Paso 4: asegúrese de que command
exista en un directorio de los definidos enPATH
Spawn puede emitir el ENOENT
error si el nombre de archivo command
(es decir, 'algún comando') no existe en al menos uno de los directorios definidos en PATH
.
Localice el lugar exacto de command
. En la mayoría de las distribuciones de Linux, esto se puede hacer desde una terminal con el which
comando. Le indicará la ruta absoluta al archivo ejecutable (como arriba), o le indicará si no se encuentra.
Ejemplo de uso de cuál y su salida cuando se encuentra un comando
> which some-command
some-command is /usr/bin/some-command
Ejemplo de uso de cuál y su salida cuando no se encuentra un comando
> which some-command
bash: type: some-command: not found
Los programas mal instalados son la causa más común de un comando no encontrado . Consulte la documentación de cada comando si es necesario e instálelo.
Cuando el comando es un archivo de script simple, asegúrese de que sea accesible desde un directorio en el PATH
. Si no es así, muévalo a uno o haga un enlace a él.
Una vez que determine que PATH
está configurado correctamente y command
es accesible desde él, debería poder generar el proceso de su hijo sin spawn ENOENT
ser arrojado.
exec
lugar de pasar el comando como primer argumento y las opciones como una matriz para el segundo argumento. Por ejemplo, estaba haciendo enspawn( "adb logcat -c" )
lugar despawn( "adb", [ "logcat", "-c" ] )
.