我正在使用 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/