Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

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.

like image 317
ubergam3r Avatar asked Dec 12 '12 17:12

ubergam3r


1 Answers

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();
like image 125
javawizard Avatar answered Sep 30 '22 06:09

javawizard