ডেভেলপার এবং ওয়েব ডিজাইনারদের মধ্যে NodeJs এবং Python দুটি প্রধান পছন্দের ভাষা। কিন্তু এমন কয়েকটি ক্ষেত্র রয়েছে যেখানে NodeJs পাইথনের কম হয় তা হল সংখ্যাসূচক এবং বৈজ্ঞানিক গণনা (AI, Machine Learning, Deep Learning ইত্যাদি)। যেখানে পাইথন বৈজ্ঞানিক কম্পিউটিং অনেক সহজে কাজ করার জন্য প্রচুর লাইব্রেরি প্রদান করে।
ভাগ্যক্রমে, আমরা আমাদের নোডেজ অ্যাপ্লিকেশনের মধ্যে পাইথন লাইব্রেরিগুলিকে ব্যাকগ্রাউন্ডে পাইথন চালানোর মাধ্যমে ব্যবহার করতে পারি এবং ফলাফল ফেরত দিতে পারি৷
এর জন্য আমরা ব্যাকগ্রাউন্ডে একটি পাইটন প্রক্রিয়া তৈরি করতে, কম্পিউটেশন করতে এবং আমাদের নোড প্রোগ্রামে ফলাফল ফেরত দিতে NodeJs-এর চাইল্ড_প্রসেস স্ট্যান্ডার্ড লাইব্রেরি ব্যবহার করতে যাচ্ছি।
পাইথন স্ক্রিপ্ট
আমরা একটি সাধারণ পাইথন স্ক্রিপ্ট লিখতে যাচ্ছি যা পথে বার্তাগুলিকে স্ট্যান্ডার্ড আউটপুটে আউটপুট করে।
#Import library import sys, getopt, time def main(argv): argument = '' usage = 'usage: myscript.py -f <sometext>' # parse incoming arguments try: opts, args = getopt.getopt(argv,"hf:",["foo="]) except getopt.GetoptError: print(usage) sys.exit(2) for opt, arg in opts: if opt == '-h': print(usage) sys.exit() elif opt in ("-f", "--foo"): argument = arg # print output print("Start : %s" % time.ctime()) time.sleep( 2 ) print('Foo is') time.sleep( 2 ) print(argument) print("End : %s" % time.ctime()) if __name__ == "__main__": main(sys.argv[1:])
আউটপুট
>python myscript.py -f "Hello, Python" Start : Wed Feb 20 07:52:45 2019 Foo is Hello, Python End : Wed Feb 20 07:52:49 2019
উপরের মত একই আউটপুট জেনারেট করবে, যদি আমরা আর্গুমেন্ট দিয়ে চালানোর চেষ্টা করি:
>python myscript.py --foo "Hello, Python" >python myscript.py –h
আউটপুট
usage: myscript.py -f <Hello, Python>
NodeJs ইন্টারঅ্যাকশন
আমাদের নোডেজ স্ক্রিপ্ট পাইথন স্ক্রিপ্টের সাথে যোগাযোগ করবে প্রথমে পাইথন স্ক্রিপ্ট কল করে তারপর ক্লায়েন্টের কাছে স্ক্রিপ্ট আউটপুট পাস করবে এবং ক্লায়েন্টে আউটপুট রেন্ডার করবে।
সুতরাং আসুন একটি নোডজ স্ক্রিপ্ট তৈরি করি, যেখানে আমরা spawn() পদ্ধতি ব্যবহার করে একটি চাইল্ড প্রক্রিয়া তৈরি করার চেষ্টা করব।
server.js
const path = require('path') const {spawn} = require('child_process') /** * Run python myscript, pass in `-u` to not buffer console output * @return {ChildProcess} */ function runScript(){ return spawn('python', [ "-u", path.join(__dirname, 'myscript.py'), "--foo", "some value for foo", ]); } const subprocess = runScript() // print output of script subprocess.stdout.on('data', (data) => { console.log(`data:${data}`); }); subprocess.stderr.on('data', (data) => { console.log(`error:${data}`); }); subprocess.stderr.on('close', () => { console.log("Closed"); });
উপরের স্ক্রিপ্টটি .on ('ডেটা', কলব্যাক) এর মাধ্যমে আউটপুট দেবে। পাইথনকে বাফারিং আউটপুট থেকে আটকাতে –f ফ্ল্যাগ ব্যবহার করুন অন্যথায় ডেটা ইভেন্ট আমরা এক্সিকিউশন শেষ না হওয়া পর্যন্ত প্রোগ্রাম থেকে প্রিন্ট() স্টেটমেন্ট পাব না।
>node server.js data:Start : Wed Feb 20 10:56:11 2019 data:Foo is data:some value for foo data:End : Wed Feb 20 10:56:15 2019 Closed