R:在system()中使用wait = FALSE和多行命令

时间:2014-06-17 06:44:26

标签: r

我有一个长时间运行的进程(用Java编写),我希望与系统异步运行(...,wait = FALSE)。为了能够确定进程何时结束,我想根据How to determine when a process started with system(..., wait=FALSE) has ended中给出的建议创建文件。问题是似乎wait参数仅适用于多行系统命令中的最后一行,而我似乎无法找到解决方法。

示例:

system('sleep 2')                 # waits 2 seconds before control is returned to the user
system('sleep 2', wait=FALSE)     # control is returned immediately
system('sleep 2; ls', wait=FALSE) # waits 2 seconds before control is returned to the user

我正在使用mac系统运行...

1 个答案:

答案 0 :(得分:5)

我觉得很奇怪R的系统只等待第一个命令(它应该调用shell,然后等待两个命令)但是使用&&应该这样做:

system('sleep 2 && ls', wait=FALSE)

如果R正在追加&到命令行,它变为sleep 2; ls &并且在那里&仅影响第二个参数。

另一个解决方案是在命令周围添加括号,( sleep 2 ; ls ) & 按顺序执行这两个操作:

system('( sleep 2 ; ls )', wait=FALSE)