R端子缓冲器

时间:2019-03-30 21:00:00

标签: r terminal rstudio

来自RSTUDIO的示例

启动命令,将结果显示在终端缓冲区中

termId <- rstudioapi::terminalExecute("ping rstudio.com")

如果在终端缓冲区中查看结果足够,  那么就不需要做其他事情了。该命令将继续  运行并显示其结果,而不会阻止R会话。

要以编程方式获取结果,请等待其完成。

while (is.null(rstudioapi::terminalExitCode(termId))) {
  Sys.sleep(0.1)
}

result <- rstudioapi::terminalBuffer(termId)

删除缓冲区并在IDE中关闭会话

rstudioapi::terminalKill(termId)

我的目标是“ ping”多个网站,例如:

c = c("google.com","bing.com","rstudio.com")

我想把它放在睡眠循环中,以便在ping进程完成之前ping之后出现的代码尚未运行。我要打印每个ping过程一次完成,然后在完成所有ping之后最后一条消息,然后最后清除并关闭所有终端窗口。

1 个答案:

答案 0 :(得分:0)

我要咬。这是一个快速功能及其使用:

ping <- function(hosts, count = 1, timeout = 1, all. = FALSE) {
  GOOD <- TRUE
  if (R.version$os == "mingw32") {
    countopt <- "-n"
    timeoutopt <- "-w"
    timeout <- timeout * 1000 # milliseconds
  } else {
    countopt <- "-c"
    timeoutopt <- "-w"
  }
  success <- fail <- character(0)
  for (host in hosts) {
    out <- suppressWarnings(
      system2("ping", c(countopt, count, timeoutopt, as.character(timeout), shQuote(host)),
              stdout = FALSE, stderr = FALSE)
    )
    if (out == 0) {
      success <- c(success, host)
    } else {
      fail <- c(fail, host)
      GOOD <- FALSE
      if (!all.) break
    }
  }
  attr(GOOD, "ping_success") <- success
  attr(GOOD, "ping_fail") <- fail
  GOOD
}

默认行为是依次ping通每个命令,并在所有命令均成功后返回TRUE。这将停止并在第一次失败时返回:

ping(c("google.com", "bing.com", "rstudio.com"))
# [1] TRUE
# attr(,"ping_success")
# [1] "google.com"  "bing.com"    "rstudio.com"
# attr(,"ping_fail")
# character(0)

默认情况下,它会在第一次失败后停止并包括其进度(在属性中):

ping(c("google.com", "quux.not", "rstudio.com"))
# [1] FALSE
# attr(,"ping_success")
# [1] "google.com"
# attr(,"ping_fail")
# [1] "quux.not"

如果无论失败如何都需要知道哪些是好的,那么

ping(c("google.com", "quux.not", "rstudio.com"), all. = TRUE)
# [1] FALSE
# attr(,"ping_success")
# [1] "google.com"  "rstudio.com"
# attr(,"ping_fail")
# [1] "quux.not"

由于它将幸福/悲伤表示为属性,因此您应该始终能够依靠奇异的logical值,并且,如果需要,可以更深入地研究有效的方法或无效的方法工作。