首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >R终端缓冲区

R终端缓冲区
EN

Stack Overflow用户
提问于 2019-03-31 05:00:00
回答 1查看 102关注 0票数 0

来自RSTUDIO的示例

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

代码语言:javascript
复制
termId <- rstudioapi::terminalExecute("ping rstudio.com")

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

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

代码语言:javascript
复制
while (is.null(rstudioapi::terminalExitCode(termId))) {
  Sys.sleep(0.1)
}

result <- rstudioapi::terminalBuffer(termId)

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

代码语言:javascript
复制
rstudioapi::terminalKill(termId)

我的目标是“PING”多个网站的例子:

代码语言:javascript
复制
c = c("google.com","bing.com","rstudio.com")

我想把它放在睡眠循环中,这样ping之后的代码就不会运行,直到ping过程完成。我想打印每个ping过程完成一次,然后在所有ping完成时输出最后一条消息,最后清除并关闭所有终端窗口。

EN

回答 1

Stack Overflow用户

发布于 2019-04-02 00:10:07

我会咬人的。下面是它的一个快速函数和用法:

代码语言:javascript
复制
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。这会停止,并在第一次失败时返回:

代码语言:javascript
复制
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)

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

代码语言:javascript
复制
ping(c("google.com", "quux.not", "rstudio.com"))
# [1] FALSE
# attr(,"ping_success")
# [1] "google.com"
# attr(,"ping_fail")
# [1] "quux.not"

如果您需要知道哪些是好的,而不考虑失败,那么

代码语言:javascript
复制
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值,并且如果需要,可以更深入地研究哪些有效或哪些无效。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55435623

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档