ruby - 如何获取在Windows上运行当前脚本的ruby.exe的路径?

标签 ruby windows

其他脚本中有变量,例如:

python:print(sys.executable)
的PHP:echo PHP_BINARY."\n";
ruby 中有这样的东西吗?

( ruby v.2.0)

最佳答案

以下所有答案均无法可靠工作。它们使用静态信息,但是您的ruby脚本可能由安装在默认路径以外的路径或不在PATH环境变量中的路径中的ruby实例执行。

您需要做的是使用WIN32 API。特别是,需要调用GetModuleHandleGetModuleFileName函数。第一个获取实际过程的句柄,另一个返回其路径。

灵感示例:

require 'ffi'

module Helpers
  extend FFI::Library

  ffi_lib :kernel32

  typedef :uintptr_t, :hmodule
  typedef :ulong, :dword

  attach_function :GetModuleHandle, :GetModuleHandleA, [:string], :hmodule
  attach_function :GetModuleFileName, :GetModuleFileNameA, [:hmodule, :pointer, :dword], :dword

  def self.actualRubyExecutable
    processHandle = GetModuleHandle nil

    # There is a potential issue if the ruby executable path is
    # longer than 999 chars.
    rubyPath = FFI::MemoryPointer.new 1000
    rubyPathSize = GetModuleFileName processHandle, rubyPath, 999

    rubyPath.read_string rubyPathSize
  end
end

puts Helpers.actualRubyExecutable

在Linux上,可以从/proc目录中读取此信息。

关于ruby - 如何获取在Windows上运行当前脚本的ruby.exe的路径?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18005358/

相关文章:

java - windows和linux下文件的区别

windows - 如何确定鼠标在两次单击之间允许的移动量以触发 WM_LBUTTONDBLCLK 消息?

ruby - 没有 mcrypt 的 rijndael_128 ruby

ruby - 如何从 Ruby 调用 CreateWindowEx?

ruby-on-rails - 在 Vim 中使用 Pry 的 vim-ruby-debugger 样式断点

r - 在 Anaconda Jupyter 笔记本中为 RKernel 指定 R 库路径

c - 如何检查内存是否可用于读/写操作?

ruby-on-rails - Rails I18n 翻译范围

ruby-on-rails - 按用户过滤页面

windows - 调试 Chrome 选项卡崩溃