发送参数到Runtime.getRuntime()。exec()执行后

时间:2013-05-22 09:59:06

标签: java process runtime

我需要在我的java程序中执行命令,但在执行命令后,它需要另一个参数(在我的情况下是一个密码)。如何管理Runtime.getRuntime().exec()的输出过程以接受参数以进一步执行?

我试过了new BufferedWriter(new OutputStreamWriter(signingProcess.getOutputStream())).write("123456");,但它没有用。

3 个答案:

答案 0 :(得分:5)

您的程序是否没有--password选项?通常,所有基于命令行的程序都主要用于脚本。

Runtime.getRuntime().exec(new String[]{"your-program", "--password="+pwd, "some-more-options"});

或者更复杂的方式,更容易出错:

try {
    final Process process = Runtime.getRuntime().exec(
            new String[] { "your-program", "some-more-parameters" });
    if (process != null) {
        new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    DataInputStream in = new DataInputStream(
                            process.getInputStream());
                    BufferedReader br = new BufferedReader(
                            new InputStreamReader(in));
                    String line;
                    while ((line = br.readLine()) != null) {
                        // handle input here ... ->
                        // if(line.equals("Enter Password:")) { ... }
                    }
                    in.close();
                } catch (Exception e) {
                    // handle exception here ...
                }
            }
        }).start();
    }
    process.waitFor();
    if (process.exitValue() == 0) {
        // process exited ...
    } else {
        // process failed ...
    }
} catch (Exception ex) {
    // handle exception
}

此示例打开一个新线程(请记住并发和同步),它将读取进程的输出。类似的,只要没有终止,您就可以使用输入来处理您的流程:

if (process != null) {
    new Thread(new Runnable() {
        @Override
        public void run() {
            try {
                DataOutputStream out = new DataOutputStream(
                        process.getOutputStream());
                BufferedWriter bw = new BufferedWriter(
                        new OutputStreamWriter(out));
                bw.write("feed your process with data ...");
                bw.write("feed your process with data ...");
                out.close();
            } catch (Exception e) {
                // handle exception here ...
            }
        }
    }).start();
}

希望这有帮助。

答案 1 :(得分:2)

Runtime r=Runtime.getRuntime();
process p=r.exec("your string");

试试这种方式

答案 2 :(得分:1)

如果你使用windows

,你应该给你的windows命令参数

访问此链接了解详情:http://docs.oracle.com/javase/6/docs/api/java/lang/Runtime.html