1. Adım: spawnDoğru şekilde adlandırıldığından emin olun
İlk olarak child_process.spawn (komut, argümanlar, seçenekler) için dokümanları inceleyin :
commandKomut satırı bağımsız değişkenleri ile verilen ile yeni bir işlem başlatır args. Atlanırsa, argsvarsayılan olarak boş bir Array olur.
Üçüncü argüman varsayılan olarak ek seçenekleri belirtmek için kullanılır:
{ cwd: undefined, env: process.env }
envYeni işlem tarafından görülebilecek ortam değişkenlerini belirtmek için kullanın , varsayılan değerdir process.env.
Komut satırı bağımsız değişkenleri koymadığınızdan commandve tüm spawnçağrının geçerli olduğundan emin olun . Bir sonraki adıma geçin.
Adım 2: Hata olayını yayan Olay Yayıcısını belirleme
Yapılan her çağrı için kaynak kodunu üzerinde ara spawnveya child_process.spawn, yani
spawn('some-command', [ '--help' ]);
ve orada 'hata' olayı için bir olay dinleyicisi ekleyin, böylece tam olarak 'İşlenmemiş' olarak atanan Olay Yayıcısını fark edersiniz. Hata ayıklamadan sonra, bu işleyici kaldırılabilir.
spawn('some-command', [ '--help' ])
.on('error', function( err ){ throw err })
;
Yürüt ve 'hata' dinleyicinizin kaydedildiği dosya yolunu ve satır numarasını almalısınız. Gibi bir şey:
/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)
İlk iki satır hala
events.js:72
throw er; // Unhandled 'error' event
olmadıkça bu adımı tekrarlayın. Bir sonraki adıma geçmeden önce hata yayan dinleyiciyi tanımlamalısınız.
3. Adım: Ortam değişkeninin $PATHayarlandığından emin olun
İki olası senaryo vardır:
- Varsayılan
spawndavranışa güvenirsiniz, bu nedenle alt işlem ortamı ile aynı olur process.env.
- Bağımsız değişken üzerinde bir
envnesneyi spawngeçiren optionsaçıklıktasınız.
Her iki senaryoda da, PATHortaya çıkan alt işlemin kullanacağı ortam nesnesindeki anahtarı incelemelisiniz .
Senaryo 1 örneği
// inspect the PATH key on process.env
console.log( process.env.PATH );
spawn('some-command', ['--help']);
Senaryo 2 örneği
var env = getEnvKeyValuePairsSomeHow();
// inspect the PATH key on the env object
console.log( env.PATH );
spawn('some-command', ['--help'], { env: env });
PATHundefinedspawnENOENTcommandYürütülebilir dosyaya mutlak bir yol olmadığı sürece herhangi bir yeri bulmak mümkün olmayacağından , (yani, ) olmaması hatayı yaymaya neden olur .
Doğru PATHşekilde ayarlandığında, bir sonraki adıma geçin. Bir dizin veya bir dizin listesi olmalıdır. Son durum olağan.
4. Adım: commandiçinde tanımlananların bir dizininde bulunduğundan emin olunPATH
ENOENTDosya adı command(yani, 'bazı komutlar') üzerinde tanımlanan dizinlerden en az birinde yoksa, Spawn hata verebilir PATH.
Öğesinin tam yerini bulun command. Çoğu linux dağıtımında, bu whichkomutla bir terminalden yapılabilir . Çalıştırılabilir dosyanın mutlak yolunu (yukarıdaki gibi) veya bulunup bulunmadığını söyler.
Komut olan ve çıkış Örnek kullanım Bulunan
> which some-command
some-command is /usr/bin/some-command
Komut bulunmadığında hangisinin ve çıktısının örnek kullanımı
> which some-command
bash: type: some-command: not found
yanlış yüklenen programlar, bulunmayan bir komutun en yaygın nedenidir . Gerekirse her komut belgesine bakın ve yükleyin.
Komut basit bir komut dosyası olduğunda, dosyadaki bir dizinden erişilebilir olduğundan emin olun PATH. Değilse, ya birine taşıyın ya da bir bağlantı kurun.
PATHDoğru bir şekilde ayarlandığını ve commanderişilebilir olduğunu belirledikten sonra , çocuk sürecinizi spawn ENOENTatılmadan ortaya çıkarabilmelisiniz .
execargümanı, ilk argüman olarak komutu ve ikinci argüman için bir Array olarak seçenekleri iletmek yerine, sizin gibi bir String olarak geçiriyordum. örneğinspawn( "adb logcat -c" )yerine yapıyordumspawn( "adb", [ "logcat", "-c" ] ).