r - 使用'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 提交系统命令并让它们在后台运行?
解决方案
根据@KonradRudolph 的评论,我意识到processx
R 包可以非常巧妙地处理来自 R 内部的系统进程提交。
我所要做的就是:
library(processx)
down.command <- c("parallel","--gnu", "-a", "links.txt", "wget", ">", "~/down.log", "2>&1")
processx::process$new("nohup", down.comm, cleanup=FALSE)
就这么简单,而且非常有效。
推荐阅读
- django - 检测 Django CharField 中的 URL 和 #tags 并为其添加样式
- c++ - std::begin - 类型特征中不考虑用户定义的重载
- java - Java Android Bitmap.createBitmap 过早地超过了 src 位图宽度
- ibm-integration-bus - mqsisetdbparms 不使用特殊字符
- wordpress - 我无法让 wordpress 自定义页脚在关于我们的页面上工作
- sharepoint-online - 通过外部 gmail 用户访问 sharppoint 在线休息 api
- python - 如何迭代熊猫数据框中的行,如果满足条件,则将其打印在适当的 Excel 表中?
- scrapy - Scrapy - 来自爬行的响应没有与其外壳等效的相同编码
- android - 在 phonegap 应用程序中显示网页 - android
- php - 比较器在php上使用数组