Etapa 1: verifique se spawné chamado o caminho certo
Primeiro, revise os documentos para child_process.spawn (command, args, options) :
Inicia um novo processo com o dado command, com argumentos de linha de comando em args. Se omitido, o argspadrão é uma matriz vazia.
O terceiro argumento é usado para especificar opções adicionais, cujo padrão é:
{ cwd: undefined, env: process.env }
Use envpara especificar variáveis de ambiente que serão visíveis para o novo processo, o padrão é process.env.
Verifique se você não está colocando argumentos de linha de comando commande se toda a spawnchamada é válida . Prossiga para a próxima etapa.
Etapa 2: identificar o emissor do evento que emite o evento de erro
Pesquise no seu código-fonte cada chamada para spawn, ou child_process.spawn, ie
spawn('some-command', [ '--help' ]);
e anexe lá um ouvinte de evento para o evento 'error', para que você seja notado exatamente o emissor do evento que está lançando-o como 'Unhandled'. Após a depuração, esse manipulador pode ser removido.
spawn('some-command', [ '--help' ])
.on('error', function( err ){ throw err })
;
Execute e você deve obter o caminho do arquivo e o número da linha em que o ouvinte 'erro' foi registrado. 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)
Se as duas primeiras linhas ainda estiverem
events.js:72
throw er; // Unhandled 'error' event
faça este passo novamente até que não estejam. Você deve identificar o ouvinte que emite o erro antes de prosseguir na próxima etapa.
Etapa 3: verifique se a variável de ambiente $PATHestá definida
Existem dois cenários possíveis:
- Você confia no
spawncomportamento padrão , portanto, o ambiente do processo filho será o mesmo que process.env.
- Você está explicitamente passando um
envobjeto para spawno optionsargumento.
Nos dois cenários, você deve inspecionar a PATHchave no objeto de ambiente que o processo filho gerado usará.
Exemplo para o cenário 1
// inspect the PATH key on process.env
console.log( process.env.PATH );
spawn('some-command', ['--help']);
Exemplo para o cenário 2
var env = getEnvKeyValuePairsSomeHow();
// inspect the PATH key on the env object
console.log( env.PATH );
spawn('some-command', ['--help'], { env: env });
A ausência de PATH(ou seja, é undefined) causará spawno ENOENTerro , pois não será possível localizar nenhum, a commandmenos que seja um caminho absoluto para o arquivo executável.
Quando PATHestiver definido corretamente, prossiga para a próxima etapa. Deve ser um diretório ou uma lista de diretórios. O último caso é o habitual.
Etapa 4: verifique se commandexiste em um diretório daqueles definidos emPATH
O spawn pode emitir o ENOENTerro se o nome do arquivo command(por exemplo, 'algum comando') não existir em pelo menos um dos diretórios definidos em PATH.
Localize o local exato de command. Na maioria das distribuições linux, isso pode ser feito a partir de um terminal com o whichcomando Ele informará o caminho absoluto para o arquivo executável (como acima), ou informará se ele não foi encontrado.
Exemplo de uso de qual e sua saída quando um comando é encontrado
> which some-command
some-command is /usr/bin/some-command
Exemplo de uso de qual e sua saída quando um comando não for encontrado
> which some-command
bash: type: some-command: not found
programas instalados com falta são a causa mais comum de um comando não encontrado . Consulte a documentação de cada comando, se necessário, e instale-o.
Quando o comando é um arquivo de script simples, verifique se ele é acessível a partir de um diretório no PATH. Caso contrário, mova-o para um ou faça um link para ele.
Depois de determinar que PATHestá definido corretamente e commandé acessível a partir dele, você poderá gerar o processo filho sem spawn ENOENTser jogado.
execvez de passar o comando como o primeiro argumento e as opções como uma Matriz para o segundo argumento. por exemplo, eu estava fazendo emspawn( "adb logcat -c" )vez despawn( "adb", [ "logcat", "-c" ] ).