Node.js
बाल प्रक्रियाओं के साथ फाइलों या आदेशों को निष्पादित करना
खोज…
वाक्य - विन्यास
- child_process.exec (कमांड [, विकल्प] [, कॉलबैक])
- child_process.execFile (फ़ाइल [, args] [, विकल्प] [, कॉलबैक])
- child_process.fork (मॉड्यूलपाथ [, args] [, विकल्प])
- child_process.spawn (कमांड [, args] [, विकल्प])
- child_process.execFileSync (फ़ाइल [, args] [, विकल्प])
- child_process.execSync (कमांड [, विकल्प])
- child_process.spawnSync (कमांड [, args] [, विकल्प])
टिप्पणियों
बाल प्रक्रियाओं के साथ काम करते समय, सभी अतुल्यकालिक तरीकों से ChildProcess
की एक आवृत्ति वापस आ ChildProcess
, जबकि सभी सिंक्रोनस संस्करण जो कुछ भी चलाया गया था उसका आउटपुट वापस कर देगा। Node.js में अन्य सिंक्रोनस ऑपरेशन्स की तरह, यदि कोई त्रुटि होती है, तो वह फेंक देगा ।
एक कमांड निष्पादित करने के लिए एक नई प्रक्रिया का प्रकाशन
एक नई प्रक्रिया को शुरू करने के लिए जिसमें आपको अनबफर्ड आउटपुट की आवश्यकता होती है (जैसे लंबे समय तक चलने वाली प्रक्रियाएं जो प्रिंट करने और तुरंत बाहर निकलने के बजाय समय-समय पर आउटपुट प्रिंट कर सकती हैं), child_process.spawn()
उपयोग करें।
यह विधि किसी दिए गए आदेश और तर्कों की एक सरणी का उपयोग करके एक नई प्रक्रिया को जन्म देती है। वापसी मान का एक उदाहरण है ChildProcess
, जो बारी में प्रदान करता है stdout
और stderr
गुण। उन धाराओं के दोनों के उदाहरण हैं stream.Readable
।
निम्न कोड कमांड ls -lh /usr
का उपयोग करने के बराबर है।
const spawn = require('child_process').spawn;
const ls = spawn('ls', ['-lh', '/usr']);
ls.stdout.on('data', (data) => {
console.log(`stdout: ${data}`);
});
ls.stderr.on('data', (data) => {
console.log(`stderr: ${data}`);
});
ls.on('close', (code) => {
console.log(`child process exited with code ${code}`);
});
एक और उदाहरण कमांड:
zip -0vr "archive" ./image.png
के रूप में लिखा जा सकता है:
spawn('zip', ['-0vr', '"archive"', './image.png']);
कमांड निष्पादित करने के लिए शेल खोलना
शेल में एक कमांड चलाने के लिए, जिसमें आपको बफ़र्ड आउटपुट की आवश्यकता होती है (यानी यह स्ट्रीम नहीं है), child_process.exec
उपयोग child_process.exec
। उदाहरण के लिए, यदि आप कमांड cat *.js file | wc -l
चलाना चाहते हैं cat *.js file | wc -l
, बिना किसी विकल्प के, जो इस तरह दिखेगा:
const exec = require('child_process').exec;
exec('cat *.js file | wc -l', (err, stdout, stderr) => {
if (err) {
console.error(`exec error: ${err}`);
return;
}
console.log(`stdout: ${stdout}`);
console.log(`stderr: ${stderr}`);
});
फ़ंक्शन तीन मापदंडों तक स्वीकार करता है:
child_process.exec(command[, options][, callback]);
कमांड पैरामीटर एक स्ट्रिंग है, और इसकी आवश्यकता है, जबकि विकल्प ऑब्जेक्ट और कॉलबैक दोनों वैकल्पिक हैं। यदि कोई विकल्प ऑब्जेक्ट निर्दिष्ट नहीं है, तो exec
डिफ़ॉल्ट के रूप में निम्नलिखित का उपयोग करेगा:
{
encoding: 'utf8',
timeout: 0,
maxBuffer: 200*1024,
killSignal: 'SIGTERM',
cwd: null,
env: null
}
विकल्प ऑब्जेक्ट shell
पैरामीटर का भी समर्थन करता है, जो कि विंडोज पर UNIX और cmd.exe
पर डिफ़ॉल्ट /bin/sh
द्वारा होता है, प्रक्रिया की उपयोगकर्ता पहचान सेट करने के लिए एक uid
विकल्प और समूह पहचान के लिए एक gid
विकल्प है।
कॉलबैक, जिसे कमांड निष्पादित करते समय कहा जाता है, को तीन तर्कों (err, stdout, stderr)
साथ बुलाया जाता है। आदेश को सफलतापूर्वक कार्यान्वित करते हैं, तो err
हो जाएगा null
, अन्यथा यह का एक उदाहरण हो जाएगा Error
के साथ, err.code
प्रक्रिया के निकास कोड जा रहा है और err.signal
संकेत है कि यह समाप्त करने के लिए भेजा गया था जा रहा है।
stdout
और stderr
तर्क कमांड का आउटपुट हैं। इसे विकल्प ऑब्जेक्ट (डिफ़ॉल्ट: string
) में निर्दिष्ट एन्कोडिंग के साथ डिकोड किया गया है, लेकिन अन्यथा Buffer
ऑब्जेक्ट के रूप में वापस किया जा सकता है।
वहाँ भी exec
का एक तुल्यकालिक संस्करण मौजूद है, जो execSync
। तुल्यकालिक संस्करण एक कॉलबैक नहीं ले करता है, और वापस आ जाएगी stdout
बजाय का एक उदाहरण के ChildProcess
। यदि तुल्यकालिक संस्करण एक त्रुटि का सामना करता है, तो यह आपके प्रोग्राम को फेंक देगा और रोक देगा । यह इस तरह दिख रहा है:
const execSync = require('child_process').execSync;
const stdout = execSync('cat *.js file | wc -l');
console.log(`stdout: ${stdout}`);
एक निष्पादन योग्य चलाने के लिए एक प्रक्रिया पैदा करना
यदि आप किसी फ़ाइल को चलाना चाहते हैं, जैसे कि निष्पादन योग्य, तो child_process.execFile
उपयोग child_process.execFile
। child_process.exec
तरह एक खोल को पैदा करने के बजाय, यह सीधे एक नई प्रक्रिया बनाएगा, जो कमांड चलाने से थोड़ा अधिक कुशल है। फ़ंक्शन का उपयोग इस तरह किया जा सकता है:
const execFile = require('child_process').execFile;
const child = execFile('node', ['--version'], (err, stdout, stderr) => {
if (err) {
throw err;
}
console.log(stdout);
});
child_process.exec
विपरीत, यह फ़ंक्शन चार मापदंडों तक स्वीकार करेगा, जहां दूसरा पैरामीटर उन तर्कों की एक सरणी है जिन्हें आप निष्पादन योग्य को आपूर्ति करना चाहते हैं:
child_process.execFile(file[, args][, options][, callback]);
अन्यथा, विकल्प और कॉलबैक प्रारूप child_process.exec
समान हैं। वही फ़ंक्शन के सिंक्रोनस संस्करण के लिए जाता है:
const execFileSync = require('child_process').execFileSync;
const stdout = execFileSync('node', ['--version']);
console.log(stdout);