R:在system()中使用wait=FALSE和多行命令
我有一个长时间运行的进程(用Java编写),我希望与系统异步运行(…,wait=FALSE)。为了能够确定该过程何时结束,我希望根据中给出的建议在之后创建一个文件。问题是wait参数似乎只适用于多行系统命令中的最后一行,我似乎找不到解决这个问题的方法 例如: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)
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
。)