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

R:在system()中使用wait=FALSE和多行命令,r,R,我有一个长时间运行的进程(用Java编写),我希望与系统异步运行(…,wait=FALSE)。为了能够确定该过程何时结束,我希望根据中给出的建议在之后创建一个文件。问题是wait参数似乎只适用于多行系统命令中的最后一行,我似乎找不到解决这个问题的方法 例如: system('sleep 2') # waits 2 seconds before control is returned to the user system('sleep 2', wait=FALSE)

我有一个长时间运行的进程(用Java编写),我希望与系统异步运行(…,wait=FALSE)。为了能够确定该过程何时结束,我希望根据中给出的建议在之后创建一个文件。问题是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系统上运行。

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

system('sleep 2 && ls', wait=FALSE)
如果R在命令行中附加了一个&,它将变成
sleep 2;ls&
,其中&仅影响第二个参数

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

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

我也对这一点感到困惑,尤其是因为文档说明它在调用后附加了“&”以支持等待。使用multiline命令在终端中执行此操作效果良好。。?无论如何,你的方法是有效的。这就解释了它奇怪的行为,我用它扩展了答案。很容易确认R只是在命令后面加上了&看看系统的代码<代码>如果(!wait&&!intern)命令,这将导致Linux alikes和Windows之间的行为不一致;这似乎是一个系统运行的故事(毫不奇怪)。@rpierce我同意,这是相当悲哀的。这归结为他们使用了不同的外壳。虽然在这种情况下,我应该注意到您在windows上没有
睡眠
ls
。)