2012-08-02 12 views
37

C'è un modo per rilevare il sistema operativo in Ruby? Sto lavorando allo sviluppo di uno strumento di sketchup che dovrà rilevare MAC rispetto a WINDOWS.Sistemi Operativi Rilevamento in Ruby

+4

Puoi darci più dettagli su * perché * devi farlo? Spesso il rilevamento delle funzioni può essere più utile del rilevamento del sistema operativo globale. – Pete

risposta

20

È possibile utilizzare

puts RUBY_PLATFORM

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

Ma @Pete è giusto.

+0

voleva solo far sapere che, se si sta eseguendo un 32 bit rubino su un Windows a 64 bit, RUBY_PLATFORM vi mostrerà che l'architettura è a 32 bit. – max

+1

RUBY_PLATFORM restituirà "java" quando si utilizza JRuby, indipendentemente dal sistema operativo. – robertodecurnex

+0

Questo è sufficiente per qualcosa come rilevare se si è su OSX o meno. – Mosselman

1

È possibile controllare la costante RUBY_PLATFORM, ma in alcuni casi è inaffidabile, ad esempio quando si esegue JRuby. Altre opzioni includono catturare l'output del comando uname -a su sistemi POSIX, o utilizzando una gemma di rilevamento, come sys-uname.

48

Qui è il migliore che ho visto di recente. È dal selenio. La ragione per cui penso sia la migliore è che usa il campo host_os rbconfig che ha il vantaggio di lavorare su MRI e JRuby. RUBY_PLATFORM dirà 'java' su JRuby indipendentemente dall'host su cui è in esecuzione. Sarà necessario modificare leggermente questo metodo:

require 'rbconfig' 

    def os 
    @os ||= (
     host_os = RbConfig::CONFIG['host_os'] 
     case host_os 
     when /mswin|msys|mingw|cygwin|bccwin|wince|emc/ 
     :windows 
     when /darwin|mac os/ 
     :macosx 
     when /linux/ 
     :linux 
     when /solaris|bsd/ 
     :unix 
     else 
     raise Error::WebDriverError, "unknown os: #{host_os.inspect}" 
     end 
    ) 
    end 
+0

Nizza, ma penso che si dovrebbe aggiornare la risposta a prendere nota di la gemma "os", che già affronta il problema JRuby che hai menzionato e ottiene questo codice di rilevamento del nostro codice base. See: http://stackoverflow.com/a/20579735/109561 – Gerry

+0

Questo è anche un ottimo metodo se non puoi installa un gioiello a un sistema. Come nel caso in cui sto lavorando attualmente, dove sto costruendo uno script di sistema di basso livello che non ha accesso per installare nulla nel punto in cui ho bisogno di conoscere la versione os. <3 –

54

È possibile utilizzare il os gemma:

gem install os 

E poi

require 'os' 
OS.linux? #=> true or false 
OS.windows? #=> true or false 
OS.java? #=> true or false 
OS.bsd?  #=> true or false 
OS.mac?  #=> true or false 
# and so on. 

See: https://github.com/rdp/os

+0

Grazie per averlo trovato. Risposta fantastica :) Purtroppo, hai due anni di voti da recuperare. – Gerry

Problemi correlati