r - 使用 'system' 时如何解除R的提示?

标签 r

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

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 提交系统命令并让它们在后台运行?

最佳答案

使用“processx”,以下是如何创建一个将 stdout 和 stderr 重定向到同一文件的新进程:

args = c('--gnu', '-a', 'links.txt', 'wget')
p = processx::process$new('parallel', args, stdout = '~/down.log', stderr = '2>&1')

这将启动进程并恢复 R 脚本的执行。然后,您可以通过 p 名称与正在运行的进程进行交互。值得注意的是,您可以向它发出信号,可以查询其状态(例如 is_alive()),并且可以同步等待其完成(可以选择超时,然后终止它):

p$wait()
result = p$get_exit_status()

关于r - 使用 'system' 时如何解除R的提示?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68549595/

相关文章:

python - 等价于 python 的 auto.arima()

python - 如何使用 Matplotlib 在直方图中按组填充颜色?

r - ggplot : Extend regression line to predicted value with different linetype

R ggplot geom_tile 日期垂直间距不均匀

使用replicate() 或sapply() 重复用户定义的函数

R - 在 for 循环中打印对象名称

r - 如何在 R 中的对称矩阵(12k X 12k)中找到前 10,000 个元素的索引

r - 用 `dplyr`生成多列变量,向量化函数

r - 一张图上有多条线 : Adding a text acronym ("legend") to the very the end of each line (ggplot2)

html - 如何并排放置两个文件输入 R Shiny