【问题标题】:check if a program is installed检查是否安装了程序
【发布时间】:2013-02-19 18:11:17
【问题描述】:

我正在编写一个通过命令行在 R 中使用 pandoc 的函数。如何使用 R 检查是否安装了 pandoc(我还假设它必须在路径上,这对 Windows 用户来说可能是个问题)?

【问题讨论】:

  • 在具有 pandoc 和没有 pandoc 的 Windows 计算机上测试这两种解决方案......看起来两者都可以工作。我不知道哪种解决方案更强大。
  • 我可以看到system('pandoc - v') 方法优于Sys.which 的一个优点是它验证程序不仅已安装,而且可以实际运行。
  • @BrianDiggs 精彩!!

标签: r pandoc


【解决方案1】:

我没有要安装 pandoc,但一般我会测试是否安装了这样的程序:

pandoc.installed <- system('pandoc -v')==0

例如测试是否安装了java:

 java.installed <- system('java -version') ==0

java version "1.7.0_10"
Java(TM) SE Runtime Environment (build 1.7.0_10-b18)
Java HotSpot(TM) 64-Bit Server VM (build 23.6-b04, mixed mode)
> java.installed
[1] TRUE

【讨论】:

  • 您的解决方案正是我所要求的,谢谢。当我不知道自己需要什么时,阿南达发现了我真正需要的东西。
【解决方案2】:

这个建议完全基于我对这个问题的个人经验,即 RStudio 似乎无法在我的 Ubuntu 系统上读取我的 .bashrc 文件中的内容。我已经使用here 中描述的cabal install pandoc 方法安装了 Pandoc,因为我需要从更新版本的 Pandoc 中获得的功能比 Ubuntu 的包管理器提供的功能要多。从终端运行 R 可以使用 Sys.which 按预期检测 Pandoc,但是在使用 RStudio 时,它不能。 我不知道这是否是 Windows 用户的问题!

在这种情况下,一个替代/解决方法实际上是创建一个典型路径向量,您希望在其中找到 Pandoc 可执行文件(假设许多用户并没有真正关心他们的 where安装程序)。同样,此信息可在上面链接的安装页面以及 Windows 的典型 C:\\PROGRA~1\\... 路径中找到。因此,您可能有类似以下内容作为 Pandoc 的路径:

myPaths <- c("pandoc", 
             "~/.cabal/bin/pandoc", 
             "~/Library/Haskell/bin/pandoc", 
             "C:\\PROGRA~1\\Pandoc\\bin\\pandoc") 
             # Maybe a .exe is required for that last one?
             # Don't think so, but not a regular Windows user

您可以将其与Sys.which()(例如Sys.which(myPaths))和已经分享的其他一些想法一起使用。

  • 如果第一个选项是唯一匹配的,那么没有问题:您可以直接对 Pandoc 使用系统调用。
  • 如果有任何其他选项唯一匹配,您可以编写函数,在系统调用中粘贴可执行文件的完整路径,而不仅仅是“pandoc”。
  • 如果第一个选项和任何其他选项都匹配,那么您只需选择第一个选项并继续。
  • 如果不匹配,提示用户输入 Pandoc 安装路径或提供有关如何安装 Pandoc 的消息。

【讨论】:

  • 这种方法有效,不需要用户重新配置。在 Linux 和 Windows +1 上都工作过你没有给我我要求的东西,你知道我需要什么。
  • @agstudy,不客气。您和 Dason 的答案实际上是第一个想到的(我对类似的问题 here 提出了相同的建议)但是当我在发布答案之前尝试它时,它没有用,因此我需要挖掘再远一点;)
【解决方案3】:

我想你可以使用Sys.which 看看结果是否为空字符串。

pandoc.location <- Sys.which("pandoc")
if(pandoc.location == ""){
    print("pandoc not available")
}else{
    print("pandoc available")
}

【讨论】:

  • 这适用于我的 Windows 机器,但 Sys.which("firefox") 返回 "",但 system("open firefox") 启动 Firefox 浏览器...我想知道为什么。
  • 这也是我的建议(我也向 Tyler 建议了 Ghostscript here),但由于某种原因它在我的系统上不起作用。也许是因为它是阴谋集团的安装?但不确定...
  • 好点。我还没有在 Windows 上真正测试过这个。我想知道 pandoc 是否会有所不同,因为它主要是一个命令行实用程序
  • 好吧,我刚刚在我的安装了 pandoc 的 windows 盒子上试了一下,它工作正常
  • @TylerRinker 我知道 - 我在我的解决方案的 cmets 中提到了这一点。我的解决方案很好,但对于一般“用户”Ananda 的解决方案的部署更可取。但只是为了解决 RStudio 无法识别 pandoc 路径的问题......我的解决方案效果很好。
猜你喜欢
  • 1970-01-01
  • 2010-10-06
  • 1970-01-01
  • 2013-09-16
  • 2011-10-14
  • 2012-06-23
  • 1970-01-01
  • 2021-11-23
  • 2017-04-13
相关资源
最近更新 更多