2011-04-25 12 views
103

क्या node.js के भीतर से एक बाहरी प्रोग्राम निष्पादित करना संभव है? क्या पाइथन के os.system() या किसी भी लाइब्रेरी के बराबर है जो इस कार्यक्षमता को जोड़ता है?Node.js के भीतर से एक बाहरी प्रोग्राम निष्पादित करने के लिए कैसे?

उत्तर

56

आप child_process मॉड्यूल का उपयोग करना चाहते हैं। the documentation देखें, जो विभिन्न उपयोग मामलों के कई स्पष्ट उदाहरण प्रदान करता है।

+1

आपको शायद नमूना कोड को उत्तर के साथ उत्तर देना चाहिए किसी को दस्तावेज़ पढ़ने के लिए कह रहा है। – jww

105
var exec = require('child_process').exec; 
exec('pwd', function callback(error, stdout, stderr){ 
    // result 
}); 
+1

बाल प्रक्रिया के परिणामस्वरूप कार्य करने का सबसे अच्छा तरीका क्या है। उदाहरण ... यदि प्रक्रिया एक निकास कोड 0 लौटाती है, और मैं एक अलग विधि को कॉल करना चाहता हूं, तो मुझे त्रुटियों की काफी मात्रा में भागना प्रतीत होता है। – continuousqa

+0

@continuousqa - यह उत्तर 4 साल पुराना है। यदि आपको समस्याएं हैं, तो कृपया SO पर एक नया प्रश्न पोस्ट करें और यदि आवश्यक हो तो इसे संदर्भित करें। –

+1

यह [आलेख] (https://medium.com/@graeme_boy/how-to-optimize-cpu-intensive-work-in-node-js-cdc09099ed41#.se7f974h7) 'child_process' का उपयोग करने पर अच्छी युक्तियां हैं। –

53

कार्यकारी 512K के बफर आकार की स्मृति सीमित है। इस मामले में स्पॉन का उपयोग करना बेहतर है। अंडे एक साथ रन टाइम पर निष्पादित आदेश के stdout की पहुंच है

var spawn = require('child_process').spawn; 
var prc = spawn('java', ['-jar', '-Xmx512M', '-Dfile.encoding=utf8', 'script/importlistings.jar']); 

//noinspection JSUnresolvedFunction 
prc.stdout.setEncoding('utf8'); 
prc.stdout.on('data', function (data) { 
    var str = data.toString() 
    var lines = str.split(/(\r?\n)/g); 
    console.log(lines.join("")); 
}); 

prc.on('close', function (code) { 
    console.log('process exit code ' + code); 
}); 
+1

मैंने यह कोड लिया है और यह स्पॉन्ड प्रक्रिया के आउटपुट को दिखाने में विफल रहता है http://stackoverflow.com/questions/21302350/node-js-cant-get-output-of-spawned- प्रक्रिया –

+0

@PaulVerest: आपका आउटपुट 'stdout' की बजाय' stderr' में हो सकता है। मेरे मामले में हालांकि 'करीबी' कभी नहीं आ रहा है ... – hippietrail

11

सबसे आसान तरीका है:

const exec = require("child_process").exec 
exec('yourApp').unref() 

unref "yourApp" का इंतजार किए बिना अपनी प्रक्रिया को समाप्त करने के लिए आवश्यक है

यहां निष्पादन docs

+0

मुझे लगता है कि यह केवल स्पॉन के लिए काम करता है – googamanga