এটি এখন অনেক সহজ (6 বছর পরে)!
স্প্যান একটি চাইল্ডঅবজেক্ট ফেরত দেয় , যা আপনি তারপরে ইভেন্টগুলির জন্য শুনতে পারবেন । ঘটনাগুলি হ'ল:
- ক্লাস: চাইল্ডপ্রসেস
- ইভেন্ট: 'ত্রুটি'
- ইভেন্ট: 'প্রস্থান'
- ইভেন্ট: 'বন্ধ'
- ইভেন্ট: 'সংযোগ বিচ্ছিন্ন'
- ইভেন্ট: 'বার্তা'
চাইল্ডঅবজেক্ট থেকে কিছু গুচ্ছ অবজেক্ট রয়েছে , সেগুলি হ'ল :
- ক্লাস: চাইল্ডপ্রসেস
- child.stdin
- child.stdout
- child.stderr
- child.stdio
- child.pid
- child.connected
- child.kill ([সংকেত])
- চাইল্ড.সেন্ড (বার্তা [, সেন্ড হ্যান্ডল] [, কলব্যাক])
- child.disconnect ()
চাইল্ডঅবজেক্ট সম্পর্কে আরও তথ্য এখানে দেখুন: https://nodejs.org/api/child_process.html
অসমনিয়ত
নোড এখনও চালানো চালিয়ে যেতে সক্ষম থাকা অবস্থায় আপনি যদি আপনার প্রক্রিয়াটি পটভূমিতে চালাতে চান তবে অ্যাসিক্রোনাস পদ্ধতিটি ব্যবহার করুন। আপনার প্রক্রিয়াটি সম্পূর্ণ হওয়ার পরেও আপনি ক্রিয়াগুলি বেছে নিতে বেছে নিতে পারেন এবং যখন প্রক্রিয়াটির কোনও আউটপুট থাকে (উদাহরণস্বরূপ যদি আপনি ক্লায়েন্টকে স্ক্রিপ্টের আউটপুট প্রেরণ করতে চান)।
child_process.spawn (...); (নোড v0.1.90)
var spawn = require('child_process').spawn;
var child = spawn('node ./commands/server.js');
// You can also use a variable to save the output
// for when the script closes later
var scriptOutput = "";
child.stdout.setEncoding('utf8');
child.stdout.on('data', function(data) {
//Here is where the output goes
console.log('stdout: ' + data);
data=data.toString();
scriptOutput+=data;
});
child.stderr.setEncoding('utf8');
child.stderr.on('data', function(data) {
//Here is where the error output goes
console.log('stderr: ' + data);
data=data.toString();
scriptOutput+=data;
});
child.on('close', function(code) {
//Here you can get the exit code of the script
console.log('closing code: ' + code);
console.log('Full output of script: ',scriptOutput);
});
আপনি কীভাবে কলব্যাক + অ্যাসিনক্রোনাস পদ্ধতি ব্যবহার করবেন তা এখানে :
var child_process = require('child_process');
console.log("Node Version: ", process.version);
run_script("ls", ["-l", "/home"], function(output, exit_code) {
console.log("Process Finished.");
console.log('closing code: ' + exit_code);
console.log('Full output of script: ',output);
});
console.log ("Continuing to do node things while the process runs at the same time...");
// This function will output the lines from the script
// AS is runs, AND will return the full combined output
// as well as exit code when it's done (using the callback).
function run_script(command, args, callback) {
console.log("Starting Process.");
var child = child_process.spawn(command, args);
var scriptOutput = "";
child.stdout.setEncoding('utf8');
child.stdout.on('data', function(data) {
console.log('stdout: ' + data);
data=data.toString();
scriptOutput+=data;
});
child.stderr.setEncoding('utf8');
child.stderr.on('data', function(data) {
console.log('stderr: ' + data);
data=data.toString();
scriptOutput+=data;
});
child.on('close', function(code) {
callback(scriptOutput,code);
});
}
উপরের পদ্ধতিটি ব্যবহার করে, আপনি স্ক্রিপ্ট থেকে ক্লায়েন্টকে প্রতিটি আউটপুট প্রেরণ করতে পারেন (উদাহরণস্বরূপ Socket.io ব্যবহার করে প্রতিটি লাইন প্রেরণ করতে যখন আপনি ইভেন্টগুলি পাবেন stdout
বাstderr
)।
সমলয়
আপনি যদি নোডটি যা করছেন তা বন্ধ করতে এবং স্ক্রিপ্টটি শেষ না হওয়া পর্যন্ত অপেক্ষা করতে চান , আপনি সিঙ্ক্রোনাস সংস্করণ ব্যবহার করতে পারেন:
child_process.spawnSync (...);(নোড v0.11.12 +)
এই পদ্ধতিটি নিয়ে সমস্যাগুলি:
- যদি স্ক্রিপ্টটি সম্পূর্ণ হতে কিছু সময় নেয় তবে আপনার সার্ভারটি সেই পরিমাণ সময়ের জন্য স্তব্ধ হয়ে যাবে!
- স্ক্রিপ্টটি শেষ হয়ে গেলেই স্ট্যান্ডআউটটি ফিরে আসবে । এটি সমকালীন হওয়ার কারণে এটি বর্তমান লাইন শেষ না হওয়া অবধি চলতে পারে না। সুতরাং স্প্যান লাইন শেষ না হওয়া পর্যন্ত এটি 'স্টডআউট' ইভেন্ট ক্যাপচারে অক্ষম।
এটি কিভাবে ব্যবহার করতে:
var child_process = require('child_process');
var child = child_process.spawnSync("ls", ["-l", "/home"], { encoding : 'utf8' });
console.log("Process finished.");
if(child.error) {
console.log("ERROR: ",child.error);
}
console.log("stdout: ",child.stdout);
console.log("stderr: ",child.stderr);
console.log("exist code: ",child.status);
python
তখন পাস করতে ভুলবেন না-u
এটা কনসোল আউটপুট বাফার না করার জন্য পতাকা, অন্যথায় এটি স্ক্রিপ্ট দেখতে কেমন হবে লাইভ নয় stackoverflow.com/a/49947671/906265