在R中调用applescript

时间:2018-10-09 15:14:22

标签: r applescript

有什么方法可以在R中运行applescript吗?

我在R FAQ on CRAN

中找到了此参考

From release 1.3.1 R has partial support for AppleScripts. This means two things: you can run applescripts from inside R using the command applescript() (see the corresponding help)

但是在我当前的R版本中

R version 3.4.1 (2017-06-30) Platform: x86_64-apple-darwin15.6.0 (64-bit) Running under: macOS High Sierra 10.13.6

applescript()?applescript()均不返回任何内容。

谢谢西蒙

1 个答案:

答案 0 :(得分:0)

这些功能不是现代R版本中的功能(它们将IIRC追溯到macOS / Mac OS X之前的版本)。

但是,applescript()函数没有任何作用:

applescript <- function(script_source, extra_args = c()) {

  script_source <- paste0(script_source, collapse = "\n")

  tf <- tempfile(fileext = ".applescript")
  on.exit(unlink(tf), add=TRUE)

  cat(script_source, file = tf)

  osascript <- Sys.which("osascript")

  args <- c(extra_args, tf)

  system2(
    command = osascript,
    args = args,
    stdout = TRUE
  ) -> res

  invisible(res)

}

因此您可以执行任何操作,例如打开一个文件夹:

applescript(
  sprintf(
    'tell app "Finder" to open POSIX file "%s"',
    Sys.getenv("R_DOC_DIR")
  )
)

或者查询一个应用程序并返回数据:

res <- applescript('
  tell application "iTunes" 
    set r_name to name of current track
    set r_artist to artist of current track
  end
  return "artist=" & r_artist & "\ntrack=" & r_name
')

print(res)
## [1] "artist=NICO Touches the Walls" "track=Hologram"

为了使(mebbe)更容易使用(我说“ mebbe”,因为pkg在某些方面依赖于reticulate)我将其添加到了macthekinfe以macOS为中心的R包中。