首页 > 解决方案 > 使用'system'时如何释放R的提示?

问题描述

我正在使用 RStudio 在 Linux 系统上编写 R 代码。在代码中的某个时刻,我需要system调用一个命令,该命令将从文本文件的行中下载几千个文件:

down.command <- paste0("parallel --gnu -a links.txt wget")

system(down.command)

但是,此命令需要一些时间(几个小时)才能运行,并且 R 提示符在命令运行时保持锁定状态。我想在命令在后台运行时继续使用 R。

我试着这样使用nohup

down.command <- paste0("nohup parallel --gnu -a links.txt wget > ~/down.log 2>&1")

system(down.command)

但 R 提示符仍然被“锁定”,等待命令结束。

有什么办法可以规避这种情况吗?有没有办法从 R 提交系统命令并让它们在后台运行?

标签: r

解决方案


根据@KonradRudolph 的评论,我意识到processxR 包可以非常巧妙地处理来自 R 内部的系统进程提交。

我所要做的就是:

library(processx)

down.command <- c("parallel","--gnu", "-a", "links.txt", "wget", ">", "~/down.log", "2>&1")

processx::process$new("nohup", down.comm, cleanup=FALSE)

就这么简单,而且非常有效。


推荐阅读