NodeJs और Python डेवलपर्स और वेब डिज़ाइनरों के बीच दो मुख्य पसंदीदा भाषाएँ हैं। लेकिन कुछ ऐसे क्षेत्र हैं जहां NodeJs में अजगर की कमी है, संख्यात्मक और वैज्ञानिक गणना (AI, मशीन लर्निंग, डीप लर्निंग आदि) हैं। जबकि अजगर वैज्ञानिक कंप्यूटिंग के साथ काम करने के लिए बहुत सारे पुस्तकालय प्रदान करता है।
सौभाग्य से, हम पृष्ठभूमि में अजगर चलाकर अपने नोडज एप्लिकेशन के भीतर अजगर पुस्तकालयों का उपयोग कर सकते हैं और परिणाम वापस कर सकते हैं।
इसके लिए हम 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>
नोडजेएस इंटरेक्शन
हमारी नोडज स्क्रिप्ट पहले पाइथन स्क्रिप्ट को कॉल करके पाइथन स्क्रिप्ट के साथ इंटरैक्ट करेगी, फिर क्लाइंट को स्क्रिप्ट आउटपुट पास करेगी और क्लाइंट में आउटपुट प्रस्तुत करेगी।
तो चलिए एक नोडज स्क्रिप्ट बनाते हैं, जहां हम स्पॉन () विधि का उपयोग करके एक चाइल्ड प्रोसेस बनाने की कोशिश करेंगे।
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