来自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之后最后一条消息,然后最后清除并关闭所有终端窗口。
答案 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
值,并且,如果需要,可以更深入地研究有效的方法或无效的方法工作。