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

रूबी से सिस्टम कमांड कैसे चलाएं

अगर आप रूबी से बाहरी कमांड चलाना चाहते हैं…

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

आप कुछ रूबी विधियों का उपयोग कर सकते हैं।

आपके द्वारा उपयोग की जाने वाली विधि के आधार पर आपको अलग-अलग परिणाम मिलेंगे

आइए इन तरीकों को एक साथ एक्सप्लोर करें!

रूबी सिस्टम मेथड

रूबी सिस्टम विधि बाहरी कमांड को चलाने का सबसे सरल तरीका है।

ऐसा दिखता है :

system("ls")

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

साथ ही सिस्टम आपके रूबी प्रोग्राम को आदेश पूरा होने तक प्रतीक्षा करें

इसे आजमाएं:

system("sleep 2")

बैकग्राउंड में कमांड चलाने के तरीके हैं जैसा कि हम बाद में देखेंगे।

सिस्टम 3 संभावित मान लौटा सकता है :

  • true अगर आदेश काम करता है
  • false यदि कमांड त्रुटि कोड देता है
  • nil यदि कमांड निष्पादन विफल हो जाता है (कमांड नहीं मिला)

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

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

जब आप system . के साथ कोई बाहरी कमांड चलाते हैं आपको "खोल विस्तार" प्रभाव मिलेगा।

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

उदाहरण:

system("echo *")

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

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

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

इस तरह:

system("echo", "*")

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

पर्यावरण चर का उपयोग कैसे करें

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

यहां एक उदाहरण दिया गया है:

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

# "best"

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

%x / कर्नेल#`

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

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

यहां एक उदाहरण दिया गया है :

`ls`

दूसरा %x with के साथ :

%x|ls|

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

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

एक अलग प्रक्रिया पर बाहरी कमांड चलाने के लिए Fork + Exec का उपयोग कैसे करें

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

<ब्लॉकक्वॉट>

नोट :कांटा विधि विंडोज़ पर उपलब्ध नहीं है।

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

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

fork { exec("ls") }

यह चलेगा ls किसी अन्य प्रक्रिया पर और उसका आउटपुट प्रदर्शित करें।

क्योंकि यह आदेश किसी अन्य प्रक्रिया में चल रहा है यह आपके रूबी ऐप को system . की तरह चलने से नहीं रोकेगा विधि या %x

महत्वपूर्ण:

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

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

बाहरी प्रोग्राम के साथ दोतरफा संचार के लिए पोपेन पद्धति का उपयोग कैसे करें

अगर आपको चाहिए:

  • प्रक्रिया पर अधिक नियंत्रण
  • दोतरफा संचार

फिर IO.popen विधि वह है जिसे आप ढूंढ रहे हैं।

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

यहां उदाहरण :

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 सिस्टम इमेज से अपने पीसी को कैसे रिस्टोर करें

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

  1. विंडोज 10 से ट्रोजन कैसे निकालें?

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

  1. कमांड प्रॉम्प्ट या पॉवरशेल से ऐप्स कैसे इंस्टॉल करें

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