1. Adım: spawn
Doğru şekilde adlandırıldığından emin olun
İlk olarak child_process.spawn (komut, argümanlar, seçenekler) için dokümanları inceleyin :
command
Komut satırı bağımsız değişkenleri ile verilen ile yeni bir işlem başlatır args
. Atlanırsa, args
varsayı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 }
env
Yeni 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 command
ve 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 spawn
veya 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 $PATH
ayarlandığından emin olun
İki olası senaryo vardır:
- Varsayılan
spawn
davranışa güvenirsiniz, bu nedenle alt işlem ortamı ile aynı olur process.env
.
- Bağımsız değişken üzerinde bir
env
nesneyi spawn
geçiren options
açıklıktasınız.
Her iki senaryoda da, PATH
ortaya çı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 });
PATH
undefined
spawn
ENOENT
command
Yü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: command
içinde tanımlananların bir dizininde bulunduğundan emin olunPATH
ENOENT
Dosya 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 which
komutla 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.
PATH
Doğru bir şekilde ayarlandığını ve command
erişilebilir olduğunu belirledikten sonra , çocuk sürecinizi spawn ENOENT
atılmadan ortaya çıkarabilmelisiniz .
exec
argü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" ] )
.