I’m trying to run an external program with arguments. The program can take different types of arguments, for instance
avl tip.avl or avl < test.ops
I can get avl tip.avl running through
try {
String[] list = {"avl", "test_0.avl"};
ProcessBuilder pb = new ProcessBuilder(list);
pb.command(list);
final Process p = pb.start();
BufferedReader br = new BufferedReader( new InputStreamReader( p.getInputStream() ) );
String line;
while ((line = br.readLine()) != null) {
System.out.println(line);
}
} catch (Exception ex) {
System.out.println(ex);
}
but when I try
String[] list = {"avl", "<", "test_0.ops"};
ProcessBuilder pb = new ProcessBuilder(list);
pb.command(list);
final Process p = pb.start();
the "<" does not get sent as an argument, but as an input after the program runs. avl < test.ops works ok when I try it from command line, but cant get it to work through ProcessBuilder.
I think avl tip.avl works because running avl tip.avl is the same as just running avl and then typing tip.avl. Which is what ProcessBuilder seems to be doing actually ...
I assumed the arguments would be passed all at one. What would be the right way of doing what the command prompt input does avl < test.ops + ENTER