package com.zeusville.panovit; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.io.PrintWriter; import java.io.Reader; import java.util.Map; public class TestRunPianobar { public static void dumpEnv(Map<String, String> env) { for (String key : env.keySet()) { System.out.println(key + "=" + env.get(key)); } } public static String[] envAsArray(Map<String, String> env) { String[] envp = new String[env.size()]; int i = 0; for (String key : env.keySet()) { envp[i] = key + "=" + env.get(key); i++; } return envp; } public static void main(String[] args) { try { Map<String, String> env = System.getenv(); dumpEnv(env); Process p = Runtime.getRuntime().exec("/usr/local/bin/pianobar", envAsArray(env)); Read read = new Read(p.getInputStream()); Write write = new Write(p.getOutputStream()); Thread reader = new Thread(read); Thread writer = new Thread(write); reader.start(); writer.start(); System.out.println("threads started"); int exitval = -99; try { exitval = p.waitFor(); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } System.out.println("pianobar exited with " + exitval); read.stop(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public static class Read implements Runnable { private InputStream stdout; private boolean keepRunning = true; public Read(InputStream out) { stdout = out; } public void stop() { keepRunning = false; } public void run() { Reader rdr = null; try { rdr = new InputStreamReader(new BufferedInputStream(stdout)); StringBuffer buf = new StringBuffer(); while (keepRunning) { int i = 0; while((i = rdr.read()) > -1) { buf.append((char)i); } System.out.println(buf.toString()); buf = new StringBuffer(); } } catch (IOException e) { e.printStackTrace(); } finally { if (rdr != null) { try { rdr.close(); } catch (IOException e) { e.printStackTrace(); } } rdr = null; } System.out.println(this.getClass().getName() + " has quit"); } } public static class Write implements Runnable { private OutputStream stdin; public Write(OutputStream in) { stdin = in; } public void run() { PrintWriter pw; try { System.out.println("sleep a bit before we send any commands"); Thread.sleep(3000); pw = new PrintWriter(new BufferedOutputStream(stdin)); System.out.println("Sending \n1\n"); pw.println("\r" + 1 + "\rn\r"); Thread.sleep(30000); System.out.println("Sending q"); pw.println("q\r"); pw.close(); System.out.println("Quiting"); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } System.out.println(this.getClass().getName() + " has quit"); } } }