मैं चाहता हूं कि मेरा रूबी प्रोग्राम मैक पर विंडोज की तुलना में अलग-अलग काम करे। मैं कैसे पता लगा सकता हूं कि मेरा प्रोग्राम किस सिस्टम पर चल रहा है?
मैं चाहता हूं कि मेरा रूबी प्रोग्राम मैक पर विंडोज की तुलना में अलग-अलग काम करे। मैं कैसे पता लगा सकता हूं कि मेरा प्रोग्राम किस सिस्टम पर चल रहा है?
जवाबों:
RUBY_PLATFORM
निरंतर का उपयोग करें , और वैकल्पिक रूप से इसे और अधिक अनुकूल बनाने के लिए इसे मॉड्यूल में लपेटें:
module OS
def OS.windows?
(/cygwin|mswin|mingw|bccwin|wince|emx/ =~ RUBY_PLATFORM) != nil
end
def OS.mac?
(/darwin/ =~ RUBY_PLATFORM) != nil
end
def OS.unix?
!OS.windows?
end
def OS.linux?
OS.unix? and not OS.mac?
end
def OS.jruby?
RUBY_ENGINE == 'jruby'
end
end
यह सही नहीं है, लेकिन उन प्लेटफार्मों के लिए अच्छी तरह से काम करता है जिन पर मैं विकास करता हूं, और इसका विस्तार करना काफी आसान है।
RbConfig::CONFIG["host_os"]
अपने OS को पाने के लिए बेहतर उपयोग कर रहे हैं ।
(चेतावनी: @Peter Wagenet की टिप्पणी पढ़ने के लिए) मैं इस तरह, ज्यादातर लोगों का उपयोग rubygems , अपने विश्वसनीय, पार मंच है
irb(main):001:0> Gem::Platform.local
=> #<Gem::Platform:0x151ea14 @cpu="x86", @os="mingw32", @version=nil>
irb(main):002:0> Gem::Platform.local.os
=> "mingw32"
"अद्यतन! परिवर्धन! रूबीम्स आजकल ..." के साथ संयोजन के रूप में अद्यतन उपयोग कब को कम करने के लिएGem::Platform.local.os == 'java'
भी
irb(main):002:0> require 'rbconfig'
=> true
irb(main):003:0> Config::CONFIG["arch"]
=> "i686-linux"
या
irb(main):004:0> RUBY_PLATFORM
=> "i686-linux"
Config::CONFIG[‘host_os’]
?
RbConfig::CONFIG["arch"]
irb(main):002:0> require 'rbconfig' => false
(irb):10:in
irb_binding ': अप्रचलित और पदावनत विन्यास के बजाय RbConfig का उपयोग करें। `तो मैंने उसका उपयोग किया, RbConfig::CONFIG.each
और सभी विभिन्न मूल्यों को सूचीबद्ध किया। हो सकता है कि आप जो कुछ खोज रहे हैं, उसे खोजने में मदद करने के लिए आप वहां कुछ पा सकें।
मेरे पास एक दूसरा जवाब है, और अधिक विकल्प जोड़ने के लिए। ओएस रूबीगैम और उनके जीथब पृष्ठ में एक संबंधित परियोजना सूची है।
आवश्यकता 'ओएस' >> OS.windows? => सच # या OS.doze? >> OS.bits => 32 >> OS.java? => सच # अगर आप झगड़े में भाग रहे हैं। इसके अलावा OS.jruby? >> OS.ruby_bin => "c: \ ruby18 \ bin \ ruby.exe" # या "/ usr / स्थानीय / बिन / रूबी" या नहीं >> OS.posix? => linux, os x, cygwin के लिए झूठा # सच >> OS.mac? # या OS.osx? या OS.x? => असत्य
लॉन्च रत्न का प्रयास करें ( gem install launchy
):
require 'launchy'
Launchy::Application.new.host_os_family # => :windows, :darwin, :nix, or :cygwin
require 'rbconfig'
include Config
case CONFIG['host_os']
when /mswin|windows/i
# Windows
when /linux|arch/i
# Linux
when /sunos|solaris/i
# Solaris
when /darwin/i
#MAC OS X
else
# whatever
end
case Config::CONFIG['host_os']
?
RbConfig::Obsolete::CONFIG['host_os']
... + को शामिल करने की आवश्यकता नहीं हैConfig
include
या दोनों प्रकार के मॉड्यूल बदलें , और फिर यह सबसे अच्छा जवाब IMO है। ध्यान दें कि वह कैसे include
मॉड्यूल है, इसलिए RbConfig या कॉन्फ़िग की कोई आवश्यकता नहीं है।
अपडेट करें! इसके अलावा! रूबीज आजकल जहाजों के साथ Gem.win_platform?
।
उदाहरण के लिए रूबीगैम रेपो में , और यह एक, स्पष्टता के लिए:
def self.ant_script
Gem.win_platform? ? 'ant.bat' : 'ant'
end
हम निम्नलिखित कोड के साथ अब तक बहुत अच्छा कर रहे हैं
def self.windows?
return File.exist? "c:/WINDOWS" if RUBY_PLATFORM == 'java'
RUBY_PLATFORM =~ /mingw32/ || RUBY_PLATFORM =~ /mswin32/
end
def self.linux?
return File.exist? "/usr" if RUBY_PLATFORM == 'java'
RUBY_PLATFORM =~ /linux/
end
def self.os
return :linux if self.linux?
return :windows if self.windows?
nil
end
सबसे रूबी प्रतिष्ठानों में आसानी से सुलभ कुछ के लिए जो पहले से ही आपके लिए कुछ संसाधित है, मैं ये सुझाता हूं:
Gem::Platform.local.os
# => उदा। "mingw32", "जावा", "लिनक्स", "सागविन", "ऐक्स", "दलविक" ( कोड )Gem.win_platform?
# => उदा। सही, गलत ( कोड )इन दोनों और हर दूसरे प्लेटफ़ॉर्म की जाँच करने वाली स्क्रिप्ट जो मुझे पता है कि इन अंतर्निहित चर की व्याख्या करने पर आधारित है:
RbConfig::CONFIG["host_os"]
# => उदा। "linux-gnu" (कोड 1 , 2 )RbConfig::CONFIG["arch"]
# => उदा। "I686-linux", "i386-linux-gnu" ( रूबी दुभाषिया संकलित होने पर पैरामीटर के रूप में पारित )RUBY_PLATFORM
# => उदा। "I386-linux-gnu", "darwin" - ध्यान दें कि यह JRuby में "जावा" देता है! ( कोड )
/cygwin|mswin|mingw|bccwin|wince|emx/
RUBY_ENGINE
# => उदा। "रूबी", "जुबी"यदि आप निर्भरता को बुरा नहीं मानते हैं और कुछ अधिक उपयोगकर्ता-अनुकूल चाहते हैं तो लाइब्रेरी उपलब्ध हैं। विशेष रूप से, OS जैसी विधियाँ प्रदान करता है OS.mac?
या OS.posix?
। प्लेटफ़ॉर्म विभिन्न प्रकार के यूनिक्स प्लेटफार्मों के बीच अच्छी तरह से भेद कर सकता है। Platform::IMPL
वापस आ जाएगा, जैसे। : linux,: freebsd,: netbsd,: hpux। sys-uname और sysinfo समान हैं। यूजफिनफो बेहद बेसिक है, और विंडोज, मैक और लिनक्स से परे किसी भी सिस्टम पर फेल हो जाएगा।
यदि आप विशिष्ट सिस्टम विवरण के साथ अधिक उन्नत लाइब्रेरी चाहते हैं, जैसे विभिन्न लिनक्स वितरण, रूबी में लिनक्स वितरण का पता लगाने के लिए मेरा जवाब देखें ।
RUBY_PLATFORM
या RbConfig::CONFIG["host_os"]
आबाद किए जाते हैं। कोड को देखते हुए, यह अभी भी मेरे लिए स्पष्ट नहीं है।
जब मुझे यह जानना होगा कि क्या यह विंडोज या यूनिक्स जैसा ओएस है तो यह अक्सर पर्याप्त होता है
is_unix = is_win = false
File::SEPARATOR == '/' ? is_unix = true : is_win = true
File::SEPARATOR
। यह रूबी में विकसित करने की तरह ही मंच को बतख-प्रकार करना सबसे अच्छा है। लेकिन अगर आपको यह जानना है कि प्लेटफॉर्म विंडोज है या नहीं, तो यह अनुमान लगाने की कोशिश करने के बजाय सवाल पूछें।