当前位置:  开发笔记 > 开发工具 > 正文

如何在Windows上使用Sys.which查找正确的可执行文件

如何解决《如何在Windows上使用Sys.which查找正确的可执行文件》经验,为你挑选了1个好方法。

有什么办法在Windows上使它成为Sys.which找到适当的可执行文件?两个重新解决问题的案例:

    convert.exe 这是一个Windows程序和ImageMagik程序,但Sys.which只找到一个从来没有想过R的窗口,无论我怎样在我的PATH上安排东西.

    tar.exe与git或mingw等各种东西打包在一起,甚至当我在我的路径中首先使用Rtools和Rbuildtools时,tar从来没有找到Rtools 的程序,例如从源代码安装包时.

所以,每当我在Windows上时,我都会编写一个调用7-zip的包装器.这不可能做的事情可以吗?

编辑

实际上只是添加一个环境变量.Renviron:TAR=path/to/tar.exe对于这个install.packages例子来说工作得很好,我很难记住tar.exe咬我的地方,但是Josh回答了主要问题convert.exe.



1> Josh O'Brien..:

今年早些时候,我在R-devel问了一个+/-相同的问题.回复中有一个是Henrik Bengtsson,他提供了以下有用的功能:

Sys.which2 <- function(cmd) {
    stopifnot(length(cmd) == 1)
    if (.Platform$OS.type == "windows") {
        suppressWarnings({
            pathname <- shell(sprintf("where %s 2> NUL", cmd), intern=TRUE)[1]
        })
        if (!is.na(pathname)) return(setNames(pathname, cmd))
    }
    Sys.which(cmd)
}

## Trying out Sys.which & Sys.which2 on my Windows box gives the following:
Sys.which("convert")
#                              convert 
# "C:\\Windows\\system32\\convert.exe" 
Sys.which2("convert")
#                                                 convert 
# "C:\\Program Files\\ImageMagick-6.8.8-Q16\\convert.exe" 

我真的不确定为什么R-core不仅修复Sys.which()它使它实际上是可移植的,但它们至少会记录这种行为的根本原因?system(其功能受同一问题的影响):

"命令"的搜索路径可能与系统有关:它将包含"桶"目录,工作目录和"PATH"之前的Windows系统目录.

推荐阅读
coco2冰冰
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有