6

これが可能だとは思いませんが、私は以下を使用しています:

Process p = Runtime.getRuntime().exec(command);

コマンドラインでコマンドを実行するために、途中で実行しているコマンドがユーザー名などのユーザー入力を要求する状況に遭遇しました。

これは、実行中のコマンドへの引数では解決できません。同じコマンド ライン インスタンスにユーザー名を渡して続行する方法はありますか?

- -編集 - -

私はまだこれを機能させることができません。コマンド ラインでの手順は次のとおりです。

C:\someProgram.exe
Login:
Passowrd:

そのため、実行時にプロンプ​​トが表示されたら、ログインとパスワードを渡す必要があります。私が持っているコードは動作しません:

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");
    }

次のようなことを試しました: writer.write("myUsername\n");

何か助けがあれば、プロセスで someProgram.exe が呼び出されて実行されていることがわかりますが、ハングするだけです。

4

3 に答える 3

4

p.getOutputStream() に書き込むだけです。これにより、ユーザー名がプロセスの標準入力に送信され、必要なことが行われるはずです。

out = p.getOutputStream();
out.write("fooUsername\n".getBytes());
out.flush();
于 2012-12-12T17:04:45.460 に答える
0

コマンド入力をリダイレクトし、そこにパラメーターを送信する必要があります。を使用process.setInputStream()して、このストリームに書き込みます。

于 2012-12-12T17:06:12.983 に答える
0

文字列の一部としてcommand、Unix/Linux/OSX およびおそらくPowerShell で実行している場合は、catシェル コマンドを先頭に追加して、シェルにファイルの内容を入力ストリームにダンプさせ、目的の実行可能ファイルを入力として読み込むことができます。

のようなコマンドcat user_input.txt | myAppWantsInput.pl

これは のコンテンツを取得し、user_input.txtそれを標準入力にダンプします。そのため、「myAppWantsInput.pl」がcommand実行され、標準入力から読み取られると、ファイルの内容が読み取られ、それが から入力されたかのように入力として取得されます。キーボード。

もちろん、渡そうとする値がアプリオリにわからない場合は、コマンドを呼び出す前に必要なファイルを動的に生成できます。コマンドを実行する前に必要なすべての入力を決定できない場合、これは機能しません。

于 2012-12-12T17:28:25.783 に答える