【问题标题】:Is there any remotely cross platform way to execute an external process?是否有任何远程跨平台方式来执行外部进程?
【发布时间】:2010-12-21 05:18:16
【问题描述】:

我正在寻找有关如何执行跨平台流程的建议。

我已经为我的应用编写了 Java 和 Ruby 实现,但它不是特定于语言的问题,而是特定于平台的问题。

Ubuntu /usr/bin/ 上的 E.G 会搜索我所做的任何事情

# Ruby

`HandBrakeCLI #{args}` # works on Ubuntu and likely other linux distros since HandBrakeCLI is in /usr/bin/

对于 windows,它将搜索我正在运行的当前目录。但是,如果将 windows 可执行文件复制到当前目录,则运行时链接错误将导致它崩溃(DLL 不存在)

HandBrakeCLI 的默认安装路径在“Program Files(x86)/HandBrake”中(x86 显然只有 64 位),但据我所知,Program Files 不在搜索路径中。

对于 MacOSX,除了使用“打开”命令之外,我不知道如何从命令行执行 Mac“应用程序文件夹”。但这不是一个问题,因为我真正追求的是 HandBrakeCLI,它只是一个普通的可执行文件。但是 HandBrakeCLI 未安装到 /usr/bin 或 /usr/local/bin (或其中的任何变体)

我最好的想法是制作一个包含 HandBrakeCLI 路径的配置文件。但是,如果我走那条路,那么能够检测到我在哪个平台上将是理想的,但这是另一个问题。一个我只用 C #ifdef 部分完成,而不是在 Ruby 或 Java 中完成。

我将不胜感激。

【问题讨论】:

  • 为什么不确保二进制文件在路径中?
  • 二进制文件只会出现在 linux 的路径中,除非有人手动将它放在那里。我不确定如何检查它是否在路径中。我可能会检查$!在 Ruby 和正则表达式中,但这将再次取决于您所在的平台。

标签: java ruby cross-platform external-process system-calls


【解决方案1】:

您可以使用 Java 获取当前操作系统

System.getProperty("os.name")

在红宝石中:

require 'rbconfig'
puts Config::CONFIG['host_os'] 

希望这会有所帮助:)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-12-22
    • 1970-01-01
    • 2019-12-20
    • 2013-08-16
    • 1970-01-01
    • 1970-01-01
    • 2013-07-04
    • 1970-01-01
    相关资源
    最近更新 更多