5

Java プログラムでコマンドを実行する必要がありますが、コマンドを実行した後、別のパラメーター (私の場合はパスワード) が必要でした。Runtime.getRuntime().exec()さらに実行するためにパラメーターを受け入れる出力プロセスを管理するにはどうすればよいですか?

試してみnew BufferedWriter(new OutputStreamWriter(signingProcess.getOutputStream())).write("123456");ましたが、うまくいきませんでした。

4

3 に答える 3

7

プログラムに --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();
}

お役に立てれば。

于 2013-05-22T10:07:34.857 に答える
2
Runtime r=Runtime.getRuntime();
process p=r.exec("your string");

この方法を試してください

于 2013-05-22T10:10:48.687 に答える
1

Windowsで作業する場合は、Windowsコマンドをパラメーターで指定する必要があります

詳細については、次のリンクにアクセスしてください: http://docs.oracle.com/javase/6/docs/api/java/lang/Runtime.html

于 2013-05-22T10:02:30.323 に答える