【问题标题】:What's the best-practice way to find out the platform ruby is running on?找出运行平台 ruby​​ 的最佳实践方法是什么?
【发布时间】:2013-03-31 11:25:48
【问题描述】:

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

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

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

【问题讨论】:

  • 您在寻找操作系统吗?如果是这样,这可能会有所帮助:stackoverflow.com/questions/170956/…
  • 是的,我看到了这个问题。那里的答案是那种我认为似乎有点便宜和易碎的东西..

标签: ruby cross-platform multiplatform


【解决方案1】:

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

ENV['OS']

在 Vista 上给出“Windows_NT”。

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

另见:

【讨论】:

    【解决方案2】:

    总会有的:

    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
    

    【讨论】:

    • 我考虑过这种方法,但这也意味着如果 Windows 用户没有“win32console”gem,他们会默默地失败。所以我仍然需要一种方法来区分那些应该去安装 gem 的 windows 用户和可以安全忽略 LoadError 的 linux 用户
    • @wim 抱歉,我以为 win32console 是 Ruby 安装的一部分。我相当肯定 Win32API 实际上是,所以我更新了我的答案。
    • 谢谢,这看起来是一个更好的选择,前提是在不需要的 require 'Win32API' 中没有太多开销
    猜你喜欢
    • 1970-01-01
    • 2017-12-21
    • 2017-11-16
    • 2011-04-14
    • 2022-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-28
    • 1970-01-01
    相关资源
    最近更新 更多