चरण 1: सुनिश्चित spawn
करना सही तरीका कहा जाता है
सबसे पहले, child_process.spawn (कमांड, आर्ग्स, विकल्प) के लिए डॉक्स की समीक्षा करें :
दिए गए command
कमांड लाइन तर्कों के साथ, एक नई प्रक्रिया शुरू करता है args
। यदि छोड़ा गया है, तो args
खाली एरे में चूक।
तीसरे तर्क का उपयोग अतिरिक्त विकल्पों को निर्दिष्ट करने के लिए किया जाता है, जो इसके लिए चूक करता है:
{ cwd: undefined, env: process.env }
env
पर्यावरण चर को निर्दिष्ट करने के लिए उपयोग करें जो नई प्रक्रिया को दिखाई देगा, डिफ़ॉल्ट है process.env
।
सुनिश्चित करें कि आप कोई कमांड लाइन तर्क नहीं डाल रहे हैं command
और पूरी spawn
कॉल वैध है । अगले कदम के लिए आगे बढ़ें।
चरण 2: उस ईवेंट एमिटर की पहचान करें जो त्रुटि ईवेंट का उत्सर्जन करता है
प्रत्येक कॉल के लिए अपने स्रोत कोड पर खोजें spawn
, या child_process.spawn
, यानी
spawn('some-command', [ '--help' ]);
और 'त्रुटि' घटना के लिए एक घटना श्रोता देते हैं, तो आप सटीक घटना एमिटर है कि इसे 'अनहेल्ड' के रूप में फेंक रहे हैं। डिबगिंग के बाद, उस हैंडलर को हटाया जा सकता है।
spawn('some-command', [ '--help' ])
.on('error', function( err ){ throw err })
;
निष्पादित करें और आपको फ़ाइल पथ और लाइन नंबर प्राप्त करना चाहिए जहां आपकी 'त्रुटि' श्रोता पंजीकृत थी। कुछ इस तरह:
/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)
यदि पहली दो पंक्तियाँ अभी भी हैं
events.js:72
throw er; // Unhandled 'error' event
जब तक वे नहीं करते हैं तब तक इस कदम को फिर से करें। आपको अगले चरण पर जाने से पहले त्रुटि सुनने वाले श्रोता की पहचान करनी चाहिए।
चरण 3: सुनिश्चित करें कि पर्यावरण चर $PATH
सेट किया गया है
दो संभावित परिदृश्य हैं:
- आप डिफ़ॉल्ट
spawn
व्यवहार पर भरोसा करते हैं, इसलिए चाइल्ड प्रोसेस का वातावरण वैसा ही होगा process.env
।
- आप तर्क पर एक
env
वस्तु पारित करने के spawn
लिए options
खोजबीन कर रहे हैं।
दोनों परिदृश्यों में, आपको PATH
पर्यावरण ऑब्जेक्ट पर कुंजी का निरीक्षण करना होगा जो कि स्पॉन्ड चाइल्ड प्रक्रिया का उपयोग करेगी।
परिदृश्य 1 के लिए उदाहरण
// inspect the PATH key on process.env
console.log( process.env.PATH );
spawn('some-command', ['--help']);
परिदृश्य 2 के लिए उदाहरण
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
जब तक यह निष्पादन योग्य फ़ाइल के लिए एक पूर्ण पथ नहीं है, तब तक किसी भी का पता लगाना संभव नहीं होगा ।
जब PATH
सही ढंग से सेट हो जाए, तो अगले चरण पर जाएं। यह एक निर्देशिका, या निर्देशिकाओं की एक सूची होनी चाहिए। अंतिम मामला सामान्य है।
चरण 4: सुनिश्चित करें command
कि इसमें परिभाषित लोगों की एक निर्देशिका मौजूद हैPATH
ENOENT
फ़ाइल नाम command
(यानी, 'कुछ-कमांड') में कम से कम स्पॉन त्रुटि का उत्सर्जन कर सकता है , जो परिभाषित की गई कम से कम एक निर्देशिका में मौजूद नहीं है PATH
।
की सटीक जगह का पता लगाएं command
। अधिकांश लिनक्स वितरण पर, यह एक टर्मिनल से which
कमांड के साथ किया जा सकता है । यह आपको निष्पादन योग्य फ़ाइल (जैसे ऊपर) के लिए पूर्ण पथ बताएगा, या यह बताएगा कि क्या नहीं मिला है।
उदाहरण उपयोग जो और इसके उत्पादन के लिए जब एक आदेश है पाया
> which some-command
some-command is /usr/bin/some-command
जब एक आदेश नहीं मिला है, जिसका और इसके उत्पादन का उदाहरण उपयोग
> which some-command
bash: type: some-command: not found
मिस-इंस्टॉल किए गए प्रोग्राम एक नहीं मिली कमांड के लिए सबसे आम कारण हैं । यदि आवश्यक हो तो प्रत्येक कमांड प्रलेखन का संदर्भ लें और इसे स्थापित करें।
जब कमांड एक साधारण स्क्रिप्ट फ़ाइल है, तो यह सुनिश्चित करें कि यह एक निर्देशिका से सुलभ है PATH
। यदि यह नहीं है, तो इसे एक में स्थानांतरित करें या इसके लिए एक लिंक बनाएं।
एक बार जब आप निर्धारित करते हैं कि PATH
यह सही ढंग से निर्धारित है और इससे command
सुलभ है, तो आपको अपने बच्चे की प्रक्रिया को spawn ENOENT
फेंकने के बिना स्पॉन करने में सक्षम होना चाहिए ।
exec
पहले तर्क के रूप में और दूसरे तर्क के लिए एक ऐरे के रूप में विकल्प में पास होने के बजाय करेंगे। जैसे मैंspawn( "adb logcat -c" )
इसके बजाय कर रहा थाspawn( "adb", [ "logcat", "-c" ] )
।