Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> Ruby

रूबी में सिस्टम कमांड्स चलाएं: बेस्ट प्रैक्टिसेज और तकनीकें

यदि आप रूबी से एक्सटर्नल कमांड चलाना चाहते हैं...

...जैसे wkhtmltopdf HTML फाइल को PDF में बदलने के लिए।

कुछ रूबी मेथड्स हैं जिनका आप उपयोग कर सकते हैं।

आप जिस मेथड का उपयोग करते हैं उसके आधार पर आपको अलग-अलग परिणाम मिलेंगे।

आइए इन मेथड्स को एक साथ एक्सप्लोर करते हैं!

रूबी System मेथड

रूबी system मेथड एक्सटर्नल कमांड चलाने का सबसे सरल तरीका है।

यह इस तरह दिखता है:

system("ls")

ध्यान दें कि system कमांड आउटपुट को प्रिंट करेगा जैसा कि यह होता है।

साथ ही system आपके रूबी प्रोग्राम को कमांड पूरा होने तक इंतजार कराएगा।

इसे आज़माएं:

system("sleep 2")

बाद में हम देखेंगे कि कमांड्स को बैकग्राउंड में कैसे चलाया जाए।

System 3 संभावित मान वापस कर सकता है:

  • true यदि कमांड काम करता है
  • false यदि कमांड एरर कोड लौटाता है
  • nil यदि कमांड एक्जीक्यूशन विफल होता है (कमांड नहीं मिला)

आप $? ग्लोबल वेरिएबल के साथ आपके द्वारा चलाई गई अंतिम एक्सटर्नल कमांड का एग्जिट स्टेटस कोड प्राप्त कर सकते हैं। यह स्टेटस कोड आपको इस बारे में अधिक जानकारी दे सकता है कि कमांड क्यों विफल हुआ।

शेल एक्सपेंशन क्या है?

जब आप system के साथ एक्सटर्नल कमांड चलाते हैं तो आपको "शेल एक्सपेंशन" प्रभाव मिलेगा।

शेल एक्सपेंशन तब होता है जब शेल (sh/bash/zsh) आपके कमांड से कुछ विशेष कैरेक्टर्स (*, ?, और [) लेता है और उन्हें फाइल सूची में विस्तारित करता है।

उदाहरण:

system("echo *")

यह वर्तमान डायरेक्टरी में हर फाइल और फोल्डर को प्रिंट करेगा।

* कमांड चलने से पहले फाइलों की सूची से बदल दिया जाता है।

यदि आप इन विशेष कैरेक्टर्स को वैसे ही उपयोग करना चाहते हैं आर्गुमेंट्स को system के दूसरे आर्गुमेंट के रूप में पास करें।

इस तरह:

system("echo", "*")

अब आउटपुट * होगा।

एनवायरनमेंट वेरिएबल्स का उपयोग कैसे करें

यदि आप किसी एक्सटर्नल कमांड को एक विशिष्ट एनवायरनमेंट वेरिएबल पास करना चाहते हैं आप पहले आर्गुमेंट के रूप में हैश का उपयोग कर सकते हैं।

यहाँ एक उदाहरण है:

system({"rubyguides" => "best"}, "ruby", "-e p ENV['rubyguides']")
# "best"

यह आपके रूबी एप्लिकेशन के वर्तमान एनवायरनमेंट को नहीं बदलेगा।

%x / Kernel#`

यदि आप जो कमांड चला रहे हैं उसका आउटपुट प्राप्त करना चाहते हैं, इसे प्रदर्शित करने के बजाय तो आप %x या Kernel#` मेथड का उपयोग कर सकते हैं।

वे वही काम करते हैं।

यहाँ एक उदाहरण है:

`ls`

%x के साथ एक और:

%x|ls|

ये दोनों उदाहरण ls कमांड के आउटपुट के साथ एक स्ट्रिंग लौटाएंगे।

ध्यान दें कि जब तक आप इसे थ्रेड के अंदर नहीं चलाते तब भी आपको कमांड खत्म होने का इंतजार करना होगा।

Fork + Exec का उपयोग करके एक्सटर्नल कमांड्स को अलग प्रोसेस पर चलाएं

फोर्किंग आपके वर्तमान प्रोसेस (आपके रूबी ऐप) की एक कॉपी बनाता है फिर आप exec का उपयोग करके उस कॉपी को दूसरे प्रोसेस से बदल सकते हैं।

नोट: fork मेथड विंडोज पर उपलब्ध नहीं है।

यह यूनिक्स दुनिया में एक लोकप्रिय पैटर्न है।

यहाँ बताया गया है कि यह कैसे काम करता है:

fork { exec("ls") }

यह ls को दूसरे प्रोसेस पर चलाएगा और इसका आउटपुट प्रदर्शित करेगा।

क्योंकि यह कमांड दूसरे प्रोसेस पर चल रहा है यह आपके रूबी ऐप को system मेथड या %x की तरह चलने से ब्लॉक नहीं करेगा।

महत्वपूर्ण:

यदि आप fork के बिना exec का उपयोग करते हैं तो आप अपने वर्तमान प्रोसेस को बदलने जा रहे हैं।

इसका मतलब है कि आपका रूबी प्रोग्राम समाप्त हो जाएगा।

एक्सटर्नल प्रोग्राम के साथ टू-वे कम्युनिकेशन के लिए Popen मेथड का उपयोग कैसे करें

यदि आपको आवश्यकता है:

  • प्रोसेस पर अधिक नियंत्रण
  • टू-वे कम्युनिकेशन

तब IO.popen मेथड वही है जिसकी आप तलाश कर रहे हैं।

निम्नलिखित उदाहरण में मैं irb प्रोसेस लॉन्च करने के लिए popen मेथड का उपयोग करता हूँ, फिर इसमें कुछ इनपुट भेजता हूँ और आउटपुट पढ़ता हूँ।

यहाँ उदाहरण है:

r = IO.popen("irb", "r+")
r.write "puts 123 + 1\n"
3.times { puts r.gets }
r.write "exit\n"

यह r वेरिएबल एक IO ऑब्जेक्ट है, इसका मतलब है कि आप इससे रेगुलर फाइल की तरह पढ़ और लिख सकते हैं।

popen का उपयोग करने का अर्थ यह भी है कि आपका एक्सटर्नल कमांड अपने स्वयं के प्रोसेस पर चलेगा, इसलिए आपको इसे थ्रेड पर चलाने की आवश्यकता नहीं है।

स्टैंडर्ड लाइब्रेरी में popen3 मेथड भी है।

रेगुलर popen के साथ अंतर यह है कि यह रेगुलर आउटपुट और एरर मैसेजेस को अलग-अलग IO ऑब्जेक्ट्स में विभाजित करेगा।

निष्कर्ष

आपने रूबी में एक्सटर्नल कमांड्स के साथ इंटरैक्ट करने के विभिन्न तरीकों के बारे में सीखा।

इनसे सावधान रहें!

इन कमांड्स में किसी भी प्रकार का उपयोगकर्ता इनपुट पास न करें जब तक कि आप अपने रूबी ऐप में सुरक्षा समस्या नहीं चाहते।

यदि आपने कुछ नया सीखा तो कृपया इस लेख को शेयर करें ताकि अधिक लोग इसे देख सकें।

पढ़ने के लिए धन्यवाद 🙂

  1. विंडोज 10 सिस्टम इमेज का उपयोग करके अपना पीसी पुनर्स्थापित करें: चरण-दर-चरण गाइड विंडोज 10 सिस्टम इमेज का उपयोग करके अपना पीसी पुनर्स्थापित करें: चरण-दर-चरण गाइड

    आपदा रिकवरी कंप्यूटिंग में सबसे आकर्षक विषय नहीं हो सकता है, लेकिन यह निश्चित रूप से कुछ ऐसा है जिससे अवगत रहना चाहिए। हमने हाल ही में आपको दिखाया कि विंडोज सिस्टम इमेज कैसे बनाई जाती है, जिसमें आपकी हार्ड ड्राइव पर मौजूद हर चीज की सटीक प्रति होती है। इस गाइड में, हम आपको इमेज का उपयोग करके अपने पीस

  1. विंडोज 10 से ट्रोजन कैसे हटाएं: एक सुरक्षित और त्वरित गाइड विंडोज 10 से ट्रोजन कैसे हटाएं: एक सुरक्षित और त्वरित गाइड

    हम में से कोई भी इंटरनेट के बिना जीवन की कल्पना नहीं कर सकता; इस वास्तविकता को समझते हुए, हैकर्स ट्रोजन हॉर्स, वायरस आदि जैसे खतरों को फैलाने के लिए इसका उपयोग कर रहे हैं। ये दुर्भावनापूर्ण प्रोग्राम न केवल सिस्टम पर आक्रमण करते हैं बल्कि पैसे कमाने के लिए इसे हाईजैक भी करते हैं। इसलिए, हमें उचित का

  1. Windows 10/11 पर कमांड प्रॉम्प्ट या PowerShell का उपयोग करके ऐप्स तेजी से इंस्टॉल करें Windows 10/11 पर कमांड प्रॉम्प्ट या PowerShell का उपयोग करके ऐप्स तेजी से इंस्टॉल करें

    सॉफ़्टवेयर इंस्टॉल करना एक जटिल, दोहराव वाली और त्रुटि-प्रवण प्रक्रिया हो सकती है। इसका उपयोग करने से पहले, आपको पहले इसे डाउनलोड करना होगा, इंस्टॉलेशन प्रक्रिया शुरू करनी होगी, और इंस्टॉल होने तक प्रतीक्षा करनी होगी। यह आपके बहुत समय का उपभोग करता है। आप कमांड प्रॉम्प्ट से ऐप्स इंस्टॉल करना सीखकर इ