User input to the command line when using Runtime.getRuntime().exec(command);

command-line, execute, java

Solution

Just write to p.getOutputStream(). That'll send the username to the process's standard input, which should do what you want.

out = p.getOutputStream();
out.write("fooUsername\n".getBytes());
out.flush();

Problem

I dont think this is possible, but I have been using: ``` Process p = Runtime.getRuntime().exec(command); ``` to run commands on the command line, but now I have come accross a situation where the command I am running part way through will ask for some user input, for example a username. This can not be resolved by a argument to the command that is being exec, is there any way I can pass the username to the same command line instance and continue? ---EDIT--- I still cant get this to work. These are the steps on the command line: ``` C:\someProgram.exe Login: Passowrd: ``` So I need to pass the login and password when it prompts at runtime. The code I've got that doesnt work: ``` try { String CMD = "\"C:\\someProgram\""; Scanner scan = new Scanner(System.in); ProcessBuilder builder = new ProcessBuilder(CMD); builder.redirectErrorStream(true); Process process = builder.start(); InputStream is = process.getInputStream(); BufferedReader reader = new BufferedReader (new InputStreamReader(is)); OutputStream out = process.getOutputStream(); BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(out)); String line; try { while (scan.hasNext()) { String input = scan.nextLine(); if (input.toLowerCase().startsWith("login")) { writer.write("myUsername"); } else if(input.toLowerCase().startsWith("password")){ writer.write("myPassword"); } writer.flush(); line = reader.readLine(); while (line != null) { System.out.println ("Stdout: " + line); line = reader.readLine(); } if (line == null) { break; } } process.waitFor(); } finally {; writer.close(); reader.close(); } } catch (Exception err) { System.err.println("some message"); } ``` Ive tried things like: writer.write("myUsername\n"); Any help, i can see that someProgram.exe is called and running in the processes, but it just hangs.

Original source