package org.simantics.gnuplot;
+import java.io.BufferedReader;
import java.io.Closeable;
import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
import java.io.PrintStream;
import java.nio.file.Files;
import java.nio.file.Path;
private Thread stdoutDumper;
private Thread stderrDumper;
- GnuplotSession(Path workingDirectory, Path stdout, Path stderr, Process process) {
+ GnuplotSession(Path workingDirectory, boolean drainStdout, boolean drainStderr, Process process) {
this.process = process;
this.out = new PrintStream(process.getOutputStream());
- stdoutDumper = new Thread(new InputStreamToFileCopier(process.getInputStream(), stdout));
- stderrDumper = new Thread(new InputStreamToFileCopier(process.getErrorStream(), stderr));
- stdoutDumper.start();
- stderrDumper.start();
+ if (drainStdout) {
+ stdoutDumper = new Thread(new InputStreamToFileCopier(process.getInputStream(), null));
+ stdoutDumper.start();
+ }
+ if (drainStderr) {
+ stderrDumper = new Thread(new InputStreamToFileCopier(process.getErrorStream(), null));
+ stderrDumper.start();
+ }
}
private void assertAlive() {
out.println(commands);
}
+ public void evaluateStream(InputStream input, String charset) throws IOException {
+ try (BufferedReader br = new BufferedReader(new InputStreamReader(input, charset))) {
+ for (String line = br.readLine(); null != line; line = br.readLine()) {
+ out.println(line);
+ out.println();
+ }
+ }
+ }
+
public void evaluateFile(Path file) throws IOException {
try {
Files.lines(file).forEachOrdered(l -> {
out.close();
try {
// Wait for the outputs to be closed by the process itself.
- stdoutDumper.join();
- stderrDumper.join();
+ if (stdoutDumper != null)
+ stdoutDumper.join();
+ if (stderrDumper != null)
+ stderrDumper.join();
p.waitFor();
//System.out.println("gnuplot process ended");
} catch (InterruptedException e) {