चरण 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" ] )।