All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.ajjpj.afoundation.proc.CliCommand Maven / Gradle / Ivy

There is a newer version: 1.0-pre19
Show newest version
package com.ajjpj.afoundation.proc;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Pattern;


/**
 * This utility class executes a command as a separate process, returning its output (i.e. stdout) as a list of strings, with each
 *  line as a separate element.

* * To guard the calling JVM against overflow, it limits the number of lines of output that are stored.

* * NB: This class executes the command *synchronously*, blocking until it returns. For long running commands, that may * or may not be a problem for calling code.

* * @author arno */ @SuppressWarnings("unused") public class CliCommand { private final List stdout = new ArrayList<>(); private final int returnCode; @SuppressWarnings("unused") public CliCommand(String... cmd) throws IOException, InterruptedException { this(1000, cmd); } public CliCommand(int maxLinesOfOutput, String... cmd) throws IOException, InterruptedException { this(maxLinesOfOutput, null, cmd); } public CliCommand(int maxLinesOfOutput, Pattern grep, String... cmd) throws IOException, InterruptedException { final ProcessBuilder pb = new ProcessBuilder(cmd); final Process process = pb.start(); final BufferedReader in = new BufferedReader(new InputStreamReader(process.getInputStream())); // platform encoding is intended here! String line; while(stdout.size() < maxLinesOfOutput && (line = in.readLine()) != null) { if(grep == null || grep.matcher(line).matches()) { stdout.add(line); } } returnCode = process.waitFor(); } @SuppressWarnings("unused") public List getOutput() { return stdout; } @SuppressWarnings("unused") public int getReturnCode() { return returnCode; } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy