পদক্ষেপ 1: নিশ্চিতকরণকে 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" ] )।