Node.js (v8.1.4) के नए संस्करण के लिए, ईवेंट्स और कॉल पुराने संस्करणों के समान या समान हैं, लेकिन यह मानक नई भाषा सुविधाओं का उपयोग करने के लिए प्रोत्साहित किया जाता है। उदाहरण:
बफर के लिए, गैर-स्ट्रीम स्वरूपित आउटपुट (आप इसे एक ही बार में प्राप्त करते हैं), उपयोग करें child_process.exec
:
const { exec } = require('child_process');
exec('cat *.js bad_file | wc -l', (err, stdout, stderr) => {
if (err) {
// node couldn't execute the command
return;
}
// the *entire* stdout and stderr (buffered)
console.log(`stdout: ${stdout}`);
console.log(`stderr: ${stderr}`);
});
आप इसका उपयोग वादों के साथ भी कर सकते हैं:
const util = require('util');
const exec = util.promisify(require('child_process').exec);
async function ls() {
const { stdout, stderr } = await exec('ls');
console.log('stdout:', stdout);
console.log('stderr:', stderr);
}
ls();
यदि आप डेटा को क्रम में धीरे-धीरे प्राप्त करना चाहते हैं (एक स्ट्रीम के रूप में आउटपुट), तो उपयोग करें child_process.spawn
:
const { spawn } = require('child_process');
const child = spawn('ls', ['-lh', '/usr']);
// use child.stdout.setEncoding('utf8'); if you want text chunks
child.stdout.on('data', (chunk) => {
// data from standard output is here as buffers
});
// since these are streams, you can pipe them elsewhere
child.stderr.pipe(dest);
child.on('close', (code) => {
console.log(`child process exited with code ${code}`);
});
इन दोनों कार्यों में एक समकालिक समकक्ष है। इसके लिए एक उदाहरण child_process.execSync
:
const { execSync } = require('child_process');
// stderr is sent to stderr of parent process
// you can set options.stdio if you want it to go elsewhere
let stdout = execSync('ls');
साथ ही child_process.spawnSync
:
const { spawnSync} = require('child_process');
const child = spawnSync('ls', ['-lh', '/usr']);
console.log('error', child.error);
console.log('stdout ', child.stdout);
console.log('stderr ', child.stderr);
नोट: निम्नलिखित कोड अभी भी कार्यात्मक है, लेकिन मुख्य रूप से ES5 और उससे पहले के उपयोगकर्ताओं पर लक्षित है।
Node.js के साथ बच्चे की प्रक्रियाओं को जन्म देने के लिए मॉड्यूल प्रलेखन (v5.0.0) में अच्छी तरह से प्रलेखित है । एक कमांड निष्पादित करने और बफर के रूप में इसका पूरा आउटपुट लाने के लिए, उपयोग करें child_process.exec
:
var exec = require('child_process').exec;
var cmd = 'prince -v builds/pdf/book.html -o builds/pdf/book.pdf';
exec(cmd, function(error, stdout, stderr) {
// command output is in stdout
});
यदि आपको स्ट्रीम के साथ I / O हैंडल प्रक्रिया का उपयोग करने की आवश्यकता है, जैसे कि जब आप बड़ी मात्रा में आउटपुट की उम्मीद कर रहे हैं, तो उपयोग करें child_process.spawn
:
var spawn = require('child_process').spawn;
var child = spawn('prince', [
'-v', 'builds/pdf/book.html',
'-o', 'builds/pdf/book.pdf'
]);
child.stdout.on('data', function(chunk) {
// output will be here in chunks
});
// or if you want to send output elsewhere
child.stdout.pipe(dest);
यदि आप कमांड के बजाय किसी फ़ाइल को निष्पादित कर रहे हैं, तो आप उपयोग करना चाह सकते हैं child_process.execFile
, कौन से पैरामीटर जो लगभग समान हैं spawn
, लेकिन exec
आउटपुट बफ़र्स को प्राप्त करने के लिए एक चौथा कॉलबैक पैरामीटर है । यह इस तरह से लग सकता है:
var execFile = require('child_process').execFile;
execFile(file, args, options, function(error, stdout, stderr) {
// command output is in stdout
});
V0.11.12 के अनुसार , नोड अब तुल्यकालिक spawn
और समर्थन करता है exec
। ऊपर वर्णित सभी विधियाँ अतुल्यकालिक हैं, और एक तुल्यकालिक समकक्ष है। उनके लिए प्रलेखन यहाँ पाया जा सकता है । जब वे स्क्रिप्टिंग के लिए उपयोगी होते हैं, तो ध्यान दें कि चाइल्ड प्रक्रियाओं को एसिंक्रोनस रूप से स्पॉन करने के लिए उपयोग किए जाने वाले तरीकों के विपरीत, सिंक्रोनस तरीकों की एक आवृत्ति वापस नहीं आती है ChildProcess
।