मेरा रूबी कार्यक्रम किस ऑपरेटिंग सिस्टम पर चल रहा है?


87

मैं चाहता हूं कि मेरा रूबी प्रोग्राम मैक पर विंडोज की तुलना में अलग-अलग काम करे। मैं कैसे पता लगा सकता हूं कि मेरा प्रोग्राम किस सिस्टम पर चल रहा है?


जवाबों:


142

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

यह सही नहीं है, लेकिन उन प्लेटफार्मों के लिए अच्छी तरह से काम करता है जिन पर मैं विकास करता हूं, और इसका विस्तार करना काफी आसान है।


8
jruby के लिए, आप RbConfig::CONFIG["host_os"]अपने OS को पाने के लिए बेहतर उपयोग कर रहे हैं ।
FilBot3

2
क्या कहीं भी ऐसा कुछ है जहाँ इस तरह की चीज़ को एक मणि में पैक किया जाता है, जिसका उपयोग कॉपी / पेस्टिंग या इस तरह से किया जा सकता है? यदि हां, तो कहां? :)
lindes

1
मैं इसे किसी भी रत्न से अधिक पसंद करता हूं।
सी जॉनसन

क्या किसी भी तरह से मैं विंडोज के एक विशिष्ट संस्करण के लिए जांच कर सकता हूं, उदाहरण के लिए विंडोज 8.1?
साजिद

कि विंडोज़ वेरिएंट रेगेक्स ऑफ बीटीडब्ल्यू है, प्रत्येक नाम कोष्ठक में होना चाहिए "| या अपेक्षा के अनुसार काम करने के लिए।
एपिफेने

23

(चेतावनी: @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'


4
Jruby पर यह सिर्फ "java" की रिपोर्ट करता है, इसलिए यह पर्याप्त नहीं है यदि आप किसी से jruby चलाने की अपेक्षा करते हैं।
पीटर वेगेनेट

17

भी

irb(main):002:0> require 'rbconfig'
=> true
irb(main):003:0> Config::CONFIG["arch"]
=> "i686-linux"

या

irb(main):004:0> RUBY_PLATFORM
=> "i686-linux"

1
क्या आपका मतलब नहीं है Config::CONFIG[‘host_os’]?
एंड्रयू ग्रिम

5
"अप्रचलित और पदावनत विन्यास के बजाय RbConfig का उपयोग करें" =>RbConfig::CONFIG["arch"]
jtzero

1
@jtzero यदि आप टिप्पणियों में और अधिक पूर्ण उत्तर प्रदान करते हैं, तो 2008 में लिखे गए उत्तर को अपडेट करें
विन्को वेर्सालोविच

रूबी में 1.9.3 (p327) इसकी सिर्फ यही रेखा है, रूबी में डिफ़ॉल्ट रूप से हैirb(main):002:0> require 'rbconfig' => false
जेट्स्टरो

जब मैंने ऐसा किया, तो मुझे एक बयान मिला जो कि मूल्यह्रास था। (irb):10:in irb_binding ': अप्रचलित और पदावनत विन्यास के बजाय RbConfig का उपयोग करें। `तो मैंने उसका उपयोग किया, RbConfig::CONFIG.eachऔर सभी विभिन्न मूल्यों को सूचीबद्ध किया। हो सकता है कि आप जो कुछ खोज रहे हैं, उसे खोजने में मदद करने के लिए आप वहां कुछ पा सकें।
FilBot3

9

मेरे पास एक दूसरा जवाब है, और अधिक विकल्प जोड़ने के लिए। ओएस रूबीगैम और उनके जीथब पृष्ठ में एक संबंधित परियोजना सूची है।

आवश्यकता 'ओएस'

>> 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?
=> असत्य

7

लॉन्च रत्न का प्रयास करें ( gem install launchy):

require 'launchy'
Launchy::Application.new.host_os_family # => :windows, :darwin, :nix, or :cygwin 

कि 2.1.0 में लॉन्ची :: Application.new.host_os_family है।
फर्जीवाड़ा

1
FYI करें - लॉन्ची rbconfig का उपयोग करता है: github.com/copiousfreetime/launchy/blob/master/lib/launchy/…
codecraig

4
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']?
समकक्ष 8

वास्तव में रूबी 2 में यह होना चाहिए RbConfig::Obsolete::CONFIG['host_os'] ... + को शामिल करने की आवश्यकता नहीं हैConfig
समकक्ष 8

includeया दोनों प्रकार के मॉड्यूल बदलें , और फिर यह सबसे अच्छा जवाब IMO है। ध्यान दें कि वह कैसे includeमॉड्यूल है, इसलिए RbConfig या कॉन्फ़िग की कोई आवश्यकता नहीं है।
FilBot3


2

हम निम्नलिखित कोड के साथ अब तक बहुत अच्छा कर रहे हैं

  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

0

सबसे रूबी प्रतिष्ठानों में आसानी से सुलभ कुछ के लिए जो पहले से ही आपके लिए कुछ संसाधित है, मैं ये सुझाता हूं:

  1. Gem::Platform.local.os# => उदा। "mingw32", "जावा", "लिनक्स", "सागविन", "ऐक्स", "दलविक" ( कोड )
  2. Gem.win_platform?# => उदा। सही, गलत ( कोड )

इन दोनों और हर दूसरे प्लेटफ़ॉर्म की जाँच करने वाली स्क्रिप्ट जो मुझे पता है कि इन अंतर्निहित चर की व्याख्या करने पर आधारित है:

  1. RbConfig::CONFIG["host_os"]# => उदा। "linux-gnu" (कोड 1 , 2 )
  2. RbConfig::CONFIG["arch"]# => उदा। "I686-linux", "i386-linux-gnu" ( रूबी दुभाषिया संकलित होने पर पैरामीटर के रूप में पारित )
  3. RUBY_PLATFORM# => उदा। "I386-linux-gnu", "darwin" - ध्यान दें कि यह JRuby में "जावा" देता है! ( कोड )
    • ये सभी विंडोज वेरिएंट हैं: /cygwin|mswin|mingw|bccwin|wince|emx/
  4. RUBY_ENGINE# => उदा। "रूबी", "जुबी"

यदि आप निर्भरता को बुरा नहीं मानते हैं और कुछ अधिक उपयोगकर्ता-अनुकूल चाहते हैं तो लाइब्रेरी उपलब्ध हैं। विशेष रूप से, OS जैसी विधियाँ प्रदान करता है OS.mac?या OS.posix?प्लेटफ़ॉर्म विभिन्न प्रकार के यूनिक्स प्लेटफार्मों के बीच अच्छी तरह से भेद कर सकता है। Platform::IMPLवापस आ जाएगा, जैसे। : linux,: freebsd,: netbsd,: hpux। sys-uname और sysinfo समान हैं। यूजफिनफो बेहद बेसिक है, और विंडोज, मैक और लिनक्स से परे किसी भी सिस्टम पर फेल हो जाएगा।

यदि आप विशिष्ट सिस्टम विवरण के साथ अधिक उन्नत लाइब्रेरी चाहते हैं, जैसे विभिन्न लिनक्स वितरण, रूबी में लिनक्स वितरण का पता लगाने के लिए मेरा जवाब देखें ।


मैं अधिक सटीक स्पष्टीकरण या लिंक का स्वागत करता हूं कि कैसे RUBY_PLATFORMया RbConfig::CONFIG["host_os"]आबाद किए जाते हैं। कोड को देखते हुए, यह अभी भी मेरे लिए स्पष्ट नहीं है।
sondra.kinsey

-6

जब मुझे यह जानना होगा कि क्या यह विंडोज या यूनिक्स जैसा ओएस है तो यह अक्सर पर्याप्त होता है

is_unix = is_win = false
File::SEPARATOR == '/' ? is_unix = true : is_win = true

1
फ़ाइल :: SEPARATOR खिड़कियों में देता है / है, तो यह काम नहीं करता
पीटर

3
चारों तरफ बुरा अभ्यास। यदि आप जानना चाहते हैं कि फ़ाइल विभाजक क्या है, तो उपयोग करें File::SEPARATOR। यह रूबी में विकसित करने की तरह ही मंच को बतख-प्रकार करना सबसे अच्छा है। लेकिन अगर आपको यह जानना है कि प्लेटफॉर्म विंडोज है या नहीं, तो यह अनुमान लगाने की कोशिश करने के बजाय सवाल पूछें।
रॉबिन डौबर्टी
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.