来自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完成时输出最后一条消息,最后清除并关闭所有终端窗口。
发布于 2019-04-02 00:10:07
我会咬人的。下面是它的一个快速函数和用法:
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值,并且如果需要,可以更深入地研究哪些有效或哪些无效。
https://stackoverflow.com/questions/55435623
复制相似问题