98 votes

Comment puis-je savoir sur quel système d'exploitation tourne mon programme Ruby ?

Je veux que mon programme Ruby fasse des choses différentes sur un Mac et sur Windows. Comment puis-je savoir sur quel système mon programme s'exécute ?

158voto

Aaron Hinni Points 7879

Utilisez le RUBY_PLATFORM et, éventuellement, l'envelopper dans un module pour le rendre plus convivial :

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

Il n'est pas parfait, mais fonctionne bien pour les plateformes sur lesquelles je développe, et il est assez facile à étendre.

29voto

jtzero Points 673

(Avertissement : lire le commentaire de @Peter Wagenet ) J'aime ça, la plupart des gens utilisent rubygems il est fiable, il est multiplateforme

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"

mise à jour utiliser en conjonction avec "Mise à jour ! Ajout ! Rubygems de nos jours..." à atténuer lorsque Gem::Platform.local.os == 'java'

18voto

Vinko Vrsalovic Points 116138

Soit

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

ou

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

11voto

jtzero Points 673

J'ai une deuxième réponse, pour ajouter d'autres options à la mêlée. L'os rubygem et leurs page github a une liste de projets connexes.

require 'os'

>> OS.windows?
=> true   # or OS.doze?

>> OS.bits
=> 32

>> OS.java?
=> true # if you're running in jruby.  Also OS.jruby?

>> OS.ruby\_bin
=> "c:\\ruby18\\bin\\ruby.exe" # or "/usr/local/bin/ruby" or what not

>> OS.posix?
=> false # true for linux, os x, cygwin

>> OS.mac? # or OS.osx? or OS.x?
=> false

8voto

sondra.kinsey Points 259

Pour quelque chose de facilement accessible dans la plupart des installations Ruby et qui est déjà un peu traité pour vous, je vous recommande ceux-ci :

  1. Gem::Platform.local.os #=> ex. "mingw32", "java", "linux", "cygwin", "aix", "dalvik" ( code )
  2. Gem.win_platform? #=> ex. vrai, faux ( code )

Ces deux et tous les autres script de vérification de plate-forme que je connais sont basés sur l'interprétation de ces variables sous-jacentes :

  1. RbConfig::CONFIG["host_os"] #=> ex. "linux-gnu" (code 1 , 2 )
  2. RbConfig::CONFIG["arch"] #=> par exemple, "i686-linux", "i386-linux-gnu" (transmis en tant que lors de la compilation de l'interpréteur Ruby. )
  3. RUBY_PLATFORM #=> Par exemple, "i386-linux-gnu" et "darwin". Notez que cela renvoie "java" en JRuby ! ( code )
    • Ce sont toutes des variantes de Windows : /cygwin|mswin|mingw|bccwin|wince|emx/
  4. RUBY_ENGINE #=> par exemple, "ruby", "jruby".

Des bibliothèques sont disponibles si la dépendance ne vous dérange pas et si vous voulez quelque chose d'un peu plus convivial. Plus précisément, OS propose des méthodes comme OS.mac? o OS.posix? . Plate-forme peut bien faire la distinction entre une variété de plateformes Unix. Platform::IMPL retournera, par exemple, :linux, :freebsd, :netbsd, :hpux. sys-uname y sysinfo sont similaires. utilinfo est extrêmement basique, et échouera sur tous les systèmes autres que Windows, Mac et Linux.

Si vous voulez des bibliothèques plus avancées avec des détails de système spécifiques, comme les différentes distributions de Linux, voyez ma réponse pour Détecter une distribution Linux en Ruby .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X