प्रणाली
systemविधि एक प्रणाली कार्यक्रम कहता है। आपको इस विधि के लिए एक स्ट्रिंग तर्क के रूप में कमांड प्रदान करना होगा। उदाहरण के लिए:
>> system("date")
Wed Sep 4 22:03:44 CEST 2013
=> true
लागू कार्यक्रम वर्तमान का उपयोग करेगा STDIN, STDOUTऔर STDERRअपनी रूबी कार्यक्रम की वस्तुओं। वास्तव में, वास्तविक वापसी मूल्य या तो है true, falseया nil। उदाहरण में दिनांक IO ऑब्जेक्ट के माध्यम से मुद्रित किया गया था STDIN। trueयदि प्रक्रिया शून्य स्थिति के साथ बाहर निकल जाती है, falseतो प्रक्रिया वापस आ जाएगी यदि गैर-शून्य स्थिति के साथ प्रक्रिया nilसमाप्त हो गई और यदि निष्पादन विफल हो गया।
एक अन्य दुष्प्रभाव यह है कि वैश्विक चर $?एक Process::Statusवस्तु पर सेट है । इस ऑब्जेक्ट में कॉल स्वयं के बारे में जानकारी होगी, जिसमें चालान प्रक्रिया की प्रक्रिया पहचानकर्ता (पीआईडी) और निकास स्थिति शामिल है।
>> system("date")
Wed Sep 4 22:11:02 CEST 2013
=> true
>> $?
=> #<Process::Status: pid 15470 exit 0>
बैकटिक
बैकटिक्स (``) एक सिस्टम प्रोग्राम को कॉल करता है और इसका आउटपुट लौटाता है। पहले दृष्टिकोण के विपरीत, कमांड एक स्ट्रिंग के माध्यम से प्रदान नहीं की जाती है, लेकिन इसे बैकटिक्स जोड़ी के अंदर रखकर।
>> `date`
=> Wed Sep 4 22:22:51 CEST 2013
वैश्विक चर $?बैकटिक्स के माध्यम से भी सेट किया गया है। बैकटिक्स के साथ आप उपयोग स्ट्रिंग इंटरपोलेशन भी कर सकते हैं।
%एक्स()
का उपयोग करना %xbackticks शैली का एक विकल्प है। यह आउटपुट भी लौटाएगा। अपने रिश्तेदारों %wऔर %q(दूसरों के बीच) की तरह, किसी भी सीमांकक को लंबे समय तक ब्रैकेट-शैली के सीमांकक मैच के रूप में पर्याप्त होगा। इसका मतलब है %x(date), %x{date}और %x-date-सभी पर्यायवाची हैं। बैकटिक्स की तरह%x स्ट्रिंग प्रक्षेप का उपयोग कर सकते हैं।
कार्यकारी
Kernel#execवर्तमान प्रक्रिया का उपयोग करके (आपकी रूबी लिपि) को इस प्रक्रिया से बदल दिया जाता है exec। विधि तर्क के रूप में एक स्ट्रिंग ले सकती है। इस मामले में स्ट्रिंग शेल विस्तार के अधीन होगी। जब एक से अधिक तर्क का उपयोग किया जाता है, तो पहले एक कार्यक्रम को निष्पादित करने के लिए उपयोग किया जाता है और निम्नलिखित को कार्यक्रम के तर्क के रूप में प्रदान किया जाता है।
Open3.popen3
कभी-कभी आवश्यक जानकारी मानक इनपुट या मानक त्रुटि के लिए लिखी जाती है और आपको उन पर भी नियंत्रण पाने की आवश्यकता होती है। यहाँ Open3.popen3काम आता है:
require 'open3'
Open3.popen3("curl http://example.com") do |stdin, stdout, stderr, thread|
pid = thread.pid
puts stdout.read.chomp
end