找出ruby正在运行的平台的最佳实践方法是什么?

时间:2013-04-09 06:44:00

标签: ruby cross-platform multiplatform

我在终端和ruby记录器中使用colored gem进行彩色打印。我需要在linux和windows上运行此代码。

在Windows上,我必须先require 'win32console',否则彩色打印不起作用(我只看到ANSI转义字符)。但是,如果我在Linux上需要win32console,它显然会中断。

在红宝石中处理这种情况的常用方法是什么?我注意到了RUBY_PLATFORM变量,但是在Windows VM上我尝试过"i386-mingw32"或者奇怪的东西。使用它加上一个条件似乎是一个非常好的方式来满足我的需要,所以我希望这个问题有一个更好的解决方案。

2 个答案:

答案 0 :(得分:2)

使用RUBY_PLATFORM没有错,这是它的目的。 你也可以问一下操作系统本身,对于那些

的窗口
ENV['OS']

在Vista上提供“Windows_NT”。

不知道其他操作系统的对应物。

另见:

答案 1 :(得分:1)

总是:

begin
  require 'win32console'
rescue LoadError
end

我发现这更容易编写和推理,试图自己决定我在哪个操作系统以及是否加载它。

更新:我认为win32console是内置的而不是gem。我相信Win32API适用于所有Windows安装,因此它是测试“这个Windows吗?”的好代理。 (而不是“这是什么操作系统,是Windows?”)。

begin
  require 'Win32API'
  windowsOS = true
rescue LoadError
  windowsOS = false
end

if windowsOS
  begin
    require 'win32console'
  rescue LoadError
    # Prompt user to install win32console gem
  end
end