Ich möchte mein Ruby-Programm verschiedene Dinge auf einem Mac als auf Windows tun. Wie kann ich herausfinden, auf welchem System mein Programm läuft?Wie kann ich herausfinden, auf welchem Betriebssystem mein Ruby-Programm läuft?
Antwort
Entweder
irb(main):002:0> require 'rbconfig'
=> true
irb(main):003:0> Config::CONFIG["arch"]
=> "i686-linux"
oder
irb(main):004:0> RUBY_PLATFORM
=> "i686-linux"
Verwenden Sie die RUBY_PLATFORM
konstant, und es gegebenenfalls in einem Modul wickeln, um es freundlicher zu machen:
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
end
Es ist nicht perfekt, aber es funktioniert gut für die Plattformen, auf denen ich arbeite, und es ist einfach genug, es zu erweitern.
Ein Fall, in dem es nicht funktioniert, ist, wenn Sie jruby verwenden. –
für jruby, verwenden Sie besser 'RbConfig :: CONFIG [" host_os "]', um Ihr Betriebssystem zu bekommen. – Pred
Gibt es irgendwo wo etwas wie dieses in ein Juwel verpackt ist, das man verwenden könnte, anstatt es zu kopieren/einfügen? Wenn ja, wo? :) – lindes
Versuchen Sie, die Launchy gem (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
Ich denke, das sollte 'case Config :: CONFIG ['host_os'] '? – equivalent8
eigentlich in Ruby 2 sollte es 'RbConfig :: Obsolete :: CONFIG ['Host_os']' ... + keine Notwendigkeit, die 'Config' enthalten – equivalent8
Ändern Sie die' include' oder beide Arten von Modulen, und dann ist dies die beste Antwort IMO. Beachten Sie, wie er das Modul "included", also keine Notwendigkeit für RbConfig oder Config. – Pred
Wenn ich muß nur wissen, ob es ein Windows- oder Unix-ähnliches Betriebssystem ist es
oft genug istis_unix = is_win = false
File::SEPARATOR == '/' ? is_unix = true : is_win = true
Datei :: SEPARATOR gibt/in Windows, so dass dies nicht funktioniert – peter
Schlechte Übung rundherum. Wenn Sie wissen möchten, was der Dateitrenner ist, verwenden Sie 'File :: SEPARATOR'. Es ist am besten, die Plattform wie in Ruby zu ducken. Wenn Sie jedoch wissen müssen, ob es sich bei der Plattform um Windows handelt, stellen Sie die Frage, anstatt zu versuchen, sie abzuleiten. –
(Warnung: @Peter Wagenet Kommentar lesen) Ich mag dies, verwenden die meisten Menschen rubygems, ist es zuverlässig, ist Cross-Plattform
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"
Update Verwendung in Verbindung mit "Update! Addition! Rubygems nowadays..." zu mildern, wenn Gem::Platform.local.os == 'java'
Auf jruby meldet es nur "java", also reicht es nicht, wenn jemand jruby laufen lässt. –
ich eine zweite Antwort, mehr Optionen in den Kampf hinzuzufügen. The os rubygem, und die github page hat eine verwandte Projektliste.
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
Wir haben ziemlich gut so weit mit dem folgenden Code
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
-Update zu tun! Zusatz! Rubygems wird heute mit Gem.win_platform?
ausgeliefert.
Example usages in the Rubygems repo, und dieses, für Klarheit:
def self.ant_script
Gem.win_platform? ? 'ant.bat' : 'ant'
end
- 1. Kann man herausfinden, in welchem Skript ein Python-Prozess läuft?
- 2. Wie kann ich herausfinden, welches Betriebssystem ich in Emacs verwende?
- 3. Wie kann ich herausfinden, auf was mein symbolischer Link zeigt?
- 4. Kann ich herausfinden, auf welchem Benutzer der Webserver wie in PHP ausgeführt wird?
- 5. Wie kann ich herausfinden, ob der Gradle-Daemon läuft?
- 6. Wie kann ich feststellen, unter welchem Benutzer Jenkins läuft?
- 7. Wie bekomme ich das Betriebssystem, auf dem PHP läuft?
- 8. Wie kann ich herausfinden, welcher Linux-Treiber mein GPIO unterstützt?
- 9. Auf welchem Tab läuft "Google Chrome Helper"?
- 10. Wie kann ich feststellen, auf welchem Monitor mein .NET Windows Forms-Programm ausgeführt wird?
- 11. Wie finde ich heraus, von welchem Laufwerk meine Exe läuft?
- 12. Wie kann ich feststellen, auf welchem Kern ein Java-Thread läuft?
- 13. Mein Javascript Ausgang umgekehrt, und ich kann nicht herausfinden, warum
- 14. Wie kann ich herausfinden, welche Version von CoreOS auf einem bestimmten Rechner läuft?
- 15. Wie kann ich die aktuelle Farbtiefe einer Maschine, auf der vista/w7 läuft, herausfinden?
- 16. Ich kann nicht herausfinden, warum mein Clearfix nicht funktioniert
- 17. Wie kann ich herausfinden, warum Mongodb abstürzt?
- 18. Warum läuft mein Prozess mit vshost32.exe anstelle von vshost.exe auf einem 64-Bit-Betriebssystem?
- 19. Wie kann ich in Ruby on Rails herausfinden, welcher Klassenmix in welchem Modul?
- 20. Wie kann ich herausfinden, was mein WAR so lange benötigt, um es auf Tomcat zu implementieren?
- 21. Wie können Sie herausfinden, welches Betriebssystem der Benutzer ausführt?
- 22. Wie kann ich die Git-Leistung herausfinden?
- 23. In Perl, wie kann ich Speicher auf das Betriebssystem freigeben?
- 24. Wie kann ich ein benutzerdefiniertes Betriebssystem auf EC2 portieren?
- 25. Wie kann ich HTML-Elemente basierend auf dem Betriebssystem anzeigen?
- 26. Mein Programm läuft nicht auf anderen Computern
- 27. läuft mein OpCache?
- 28. In welchem Verzeichnis läuft ein Windows-Dienst?
- 29. Auf welcher Plattform und welchem Software-Stack läuft Bing?
- 30. Wie kann man feststellen, auf welchem Port Rails in einem Initialisierer läuft
Wollen Sie damit sagen nicht 'Config :: CONFIG [‚host_os‘]'? –
"Verwenden Sie RbConfig anstelle von obsolet und veraltete Config" => '' 'RbConfig :: CONFIG [" arch "]' '' – jtzero
@jtzero Wenn Sie eine vollständigere Antwort in den Kommentaren bieten, werde ich die 2008 geschriebene Antwort aktualisieren –