0

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

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

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

4

2 回答 2

2

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

ENV['OS']

这在 Vista 上给出了“Windows_NT”。

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

也可以看看:

于 2013-04-09T06:53:23.340 回答
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
于 2013-04-09T07:07:56.350 回答