R Подождите, пока исполняемый файл системы не будет завершен

Я пытаюсь запустить серию входных файлов (расположенных в моей папке C:/GenSoftware/Colony/datFiles/) через исполняемый файл Colony2.exe, который находится в моей папке C: / GenSoftware / Colony /. Я пытаюсь переименовать файл 1, скопировать его в тот же каталог, что и исполняемый файл, запустить Colony2.exe с помощью функции run.colony (вставлена ​​внизу) в пакет rcolony, удалить файл и перейти к файлу 2.

Тем не менее код пытается продолжить до завершения исполняемого файла. Как я могу заставить свой цикл ждать, пока Colony2.exe не будет завершен, прежде чем он перейдет к следующей строке кода, а затем перезапустить цикл. run.colony вызывает системную команду (вставлена ​​внизу).

Вот мой код до сих пор...

rm(list=ls())

setwd("C:/GenSoftware/Colony/")
getwd()
datFiles <- list.files("datFiles")
library(rcolony)



d <- 0
for (d in 1:length(datFiles))
{
  d <- d+1
  setwd("C:/GenSoftware/Colony/datFiles/")
  file.rename(datFiles[d],"Colony2.DAT")
  file.copy(from = "C:/GenSoftware/Colony/datFiles/Colony2.DAT",to = "C:/GenSoftware/Colony/")
  datPath <- "C:/GenSoftware/Colony/Colony2.DAT"
  setwd("C:/GenSoftware/Colony/")
  run.colony(colonyexecpath = "Colony2.exe", datPath, wait = TRUE, monitor = FALSE)
  unlink(x = "C:/GenSoftware/Colony/Colony2.DAT", recursive = FALSE, force = TRUE)
  setwd("C:/GenSoftware/Colony/datFiles/")
  file.rename("Colony2.DAT",datFiles[d])
}
######## КОНЕЦ МОЕГО КОДА, НАЧАЛО run.colony CODE
run.colony
function (colonyexecpath = "prompt", datfilepath = "prompt", 
    wait = FALSE, monitor = TRUE) 
{
    if (colonyexecpath == "prompt") {
        cat("Please click to select your Colony2 executable (probably called Colony2.exe or Colony2).\n\n")
        flush.console()
        colonyexecpath <- file.choose()
    }
    if (datfilepath == "prompt") {
        cat("Please click to select your DAT file.\n\n")
        flush.console()
        datfilepath <- file.choose()
    }
    datadir <- sub("([A-Z a-z0-9:/\\]+[/\\]+)([A-Z.a-z0-9]+)", 
        "\\1", datfilepath)
    filename <- sub("([A-Z a-z0-9:/\\]+[/\\]+)([A-Z.a-z0-9]+)", 
        "\\2", datfilepath)
    colonyexec <- sub("([A-Z a-z0-9:/\\]+[/\\]+)([A-Z.a-z0-9]+)", 
        "\\2", colonyexecpath)
    current.wd <- getwd()
    x <- readLines(paste(datadir, filename, sep = ""), n = 2)
    outputfilename <- substring(x[2], 1, 20)
    outputfilename <- sub("^[\t\n\f\r ]*", "", outputfilename)
    outputfilename <- sub("[\t\n\f\r ]*$", "", outputfilename)
    outputfilename
    if (file.exists(paste(datadir, outputfilename, ".MidResult", 
        sep = ""))) {
        stop("\nThere are output files already in the directory. \nColony has already run. \nTry deleting (or moving) these files and starting again.\n")
    }
    setwd(datadir)
    if (monitor == TRUE & wait == TRUE) {
        stop("If you want to monitor the output, you must set wait as FALSE. Otherwise you cannot run other functions in the same R console.")
    }
    cat("Be aware: this may take several minutes, hours, or even weeks to run, depending on the settings used.\n")
    platform <- .Platform
    if (platform$OS.type == "unix") {
        if (file.exists("Colony2") == FALSE) {
            system(paste("cp", colonyexecpath, datadir, sep = " "))
        }
        if (filename != "Colony2.DAT") {
            system(paste("mv", paste(datadir, filename, sep = ""), 
                paste(datadir, "Colony2.DAT", sep = ""), sep = " "))
        }
        if (filename != "Colony2.DAT") {
            system(paste("cp", paste(datadir, "Colony2.DAT", 
                sep = ""), paste(datadir, filename, sep = ""), 
                sep = " "))
        }
        cat("#! /bin/sh\necho Running Colony2\nexport G95_MEM_SEGMENTS=0\n./Colony2", 
            file = paste(datadir, "Colony2.sh", sep = ""), append = FALSE)
        if (monitor == TRUE) {
            system("sh Colony2.sh | tee temp.txt", wait = wait)
        }
        else {
            system("sh Colony2.sh", wait = wait)
        }
        system(paste("rm", colonyexec))
        if (file.exists("Colony2.sh")) {
            system(paste("rm Colony2.sh"))
        }
        else {
        }
        if (filename != "Colony2.DAT") {
            system("rm Colony2.DAT")
        }
    }
    else {
        if (platform$OS.type == "windows") {
            shell(paste("copy", colonyexecpath, datadir, sep = " "))
            if (filename != "Colony2.DAT") {
                shell(paste("rename", paste(datadir, filename, 
                  sep = ""), paste(datadir, "Colony2.DAT", sep = ""), 
                  sep = " "))
            }
            shell.exec("Colony2.exe")
            if (filename != "Colony2.DAT") {
                shell(paste("rename", paste(datadir, "Colony2.DAT", 
                  sep = ""), paste(datadir, filename, sep = ""), 
                  sep = " "))
            }
            shell("del Colony2.exe")
        }
        else {
            stop(paste("This function is not correctly configured to run on", 
                platform$OS.type, "systems."))
        }
    }
    setwd(current.wd)
}

0 ответов

Другие вопросы по тегам