Search in sources :

Example 1 with ProcessOutput

use of org.broadinstitute.hellbender.utils.runtime.ProcessOutput in project gatk by broadinstitute.

the class RScriptExecutor method exec.

public boolean exec() {
    if (!RSCRIPT_EXISTS) {
        if (!ignoreExceptions) {
            throw new UserException.CannotExecuteRScript(RSCRIPT_MISSING_MESSAGE);
        } else {
            logger.warn("Skipping: " + getApproximateCommandLine());
            return false;
        }
    }
    List<File> tempFiles = new ArrayList<>();
    try {
        File tempLibSourceDir = IOUtils.tempDir("RlibSources.", "");
        File tempLibInstallationDir = IOUtils.tempDir("Rlib.", "");
        tempFiles.add(tempLibSourceDir);
        tempFiles.add(tempLibInstallationDir);
        StringBuilder expression = new StringBuilder("tempLibDir = '").append(tempLibInstallationDir).append("';");
        if (!this.libraries.isEmpty()) {
            List<String> tempLibraryPaths = new ArrayList<>();
            for (RScriptLibrary library : this.libraries) {
                File tempLibrary = library.writeLibrary(tempLibSourceDir);
                tempFiles.add(tempLibrary);
                tempLibraryPaths.add(tempLibrary.getAbsolutePath());
            }
            expression.append("install.packages(");
            expression.append("pkgs=c('").append(StringUtils.join(tempLibraryPaths, "', '")).append("'), lib=tempLibDir, repos=NULL, type='source', ");
            // Install faster by eliminating cruft.
            expression.append("INSTALL_opts=c('--no-libs', '--no-data', '--no-help', '--no-demo', '--no-exec')");
            expression.append(");");
            for (RScriptLibrary library : this.libraries) {
                expression.append("library('").append(library.getLibraryName()).append("', lib.loc=tempLibDir);");
            }
        }
        for (Resource script : this.scriptResources) {
            File tempScript = IOUtils.writeTempResource(script);
            tempFiles.add(tempScript);
            expression.append("source('").append(tempScript.getAbsolutePath()).append("');");
        }
        for (File script : this.scriptFiles) {
            expression.append("source('").append(script.getAbsolutePath()).append("');");
        }
        String[] cmd = new String[this.args.size() + 3];
        int i = 0;
        cmd[i++] = RSCRIPT_BINARY;
        cmd[i++] = "-e";
        cmd[i++] = expression.toString();
        for (String arg : this.args) cmd[i++] = arg;
        ProcessSettings processSettings = new ProcessSettings(cmd);
        //if debug is enabled, output the stdout and stdder, otherwise capture it to a buffer
        if (logger.isDebugEnabled()) {
            processSettings.getStdoutSettings().printStandard(true);
            processSettings.getStderrSettings().printStandard(true);
        } else {
            processSettings.getStdoutSettings().setBufferSize(8192);
            processSettings.getStderrSettings().setBufferSize(8192);
        }
        ProcessController controller = ProcessController.getThreadLocal();
        if (logger.isDebugEnabled()) {
            logger.debug("Executing:");
            for (String arg : cmd) logger.debug("  " + arg);
        }
        ProcessOutput po = controller.exec(processSettings);
        int exitValue = po.getExitValue();
        logger.debug("Result: " + exitValue);
        if (exitValue != 0) {
            StringBuilder message = new StringBuilder();
            message.append(String.format("\nRscript exited with %d\nCommand Line: %s", exitValue, String.join(" ", cmd)));
            //if debug was enabled the stdout/error were already output somewhere
            if (!logger.isDebugEnabled()) {
                message.append(String.format("\nStdout: %s\nStderr: %s", po.getStdout().getBufferString(), po.getStderr().getBufferString()));
            }
            throw new RScriptExecutorException(message.toString());
        }
        return true;
    } catch (GATKException e) {
        if (!ignoreExceptions) {
            throw e;
        } else {
            logger.warn(e.getMessage());
            return false;
        }
    } finally {
        for (File temp : tempFiles) FileUtils.deleteQuietly(temp);
    }
}
Also used : ArrayList(java.util.ArrayList) Resource(org.broadinstitute.hellbender.utils.io.Resource) ProcessController(org.broadinstitute.hellbender.utils.runtime.ProcessController) ProcessOutput(org.broadinstitute.hellbender.utils.runtime.ProcessOutput) ProcessSettings(org.broadinstitute.hellbender.utils.runtime.ProcessSettings) GATKException(org.broadinstitute.hellbender.exceptions.GATKException) File(java.io.File)

Example 2 with ProcessOutput

use of org.broadinstitute.hellbender.utils.runtime.ProcessOutput in project gatk by broadinstitute.

the class GenotypeGVCFsIntegrationTest method runProcess.

private static void runProcess(ProcessController processController, String[] command) {
    final ProcessSettings prs = new ProcessSettings(command);
    prs.getStderrSettings().printStandard(true);
    prs.getStdoutSettings().printStandard(true);
    final ProcessOutput output = processController.exec(prs);
    Assert.assertEquals(output.getExitValue(), 0, "Process exited with non-zero value. Command: " + Arrays.toString(command) + "\n");
}
Also used : ProcessOutput(org.broadinstitute.hellbender.utils.runtime.ProcessOutput) ProcessSettings(org.broadinstitute.hellbender.utils.runtime.ProcessSettings)

Example 3 with ProcessOutput

use of org.broadinstitute.hellbender.utils.runtime.ProcessOutput in project gatk-protected by broadinstitute.

the class GenotypeGVCFsIntegrationTest method runProcess.

private static void runProcess(ProcessController processController, String[] command) {
    final ProcessSettings prs = new ProcessSettings(command);
    prs.getStderrSettings().printStandard(true);
    prs.getStdoutSettings().printStandard(true);
    final ProcessOutput output = processController.exec(prs);
    Assert.assertEquals(output.getExitValue(), 0, "Process exited with non-zero value. Command: " + Arrays.toString(command) + "\n");
}
Also used : ProcessOutput(org.broadinstitute.hellbender.utils.runtime.ProcessOutput) ProcessSettings(org.broadinstitute.hellbender.utils.runtime.ProcessSettings)

Aggregations

ProcessOutput (org.broadinstitute.hellbender.utils.runtime.ProcessOutput)3 ProcessSettings (org.broadinstitute.hellbender.utils.runtime.ProcessSettings)3 File (java.io.File)1 ArrayList (java.util.ArrayList)1 GATKException (org.broadinstitute.hellbender.exceptions.GATKException)1 Resource (org.broadinstitute.hellbender.utils.io.Resource)1 ProcessController (org.broadinstitute.hellbender.utils.runtime.ProcessController)1