0

Java を使用して、psexec を使用してリモート サーバーでコマンドを実行する大きなバッチ ファイルとやり取りしようとしています。

プロセスビルダーを使用してファイルを起動でき、ほとんどのコマンドで正常に動作しますが、ハングアップしているようです。

バッチ ファイルの 1 つの特定のコマンドは次のとおりです。

ECHO .
Echo Which would you like to reboot?
Echo 1-10. For computers, enter computer number.
Echo E. Exit
set /p userinp=choose a number(0-22):

しかし、Javaから私は得る: . どれを再起動しますか? 1-10。コンピュータの場合は、コンピュータ番号を入力します。E.出口

そしてハングします

明らかに設定された行を読み取っていませんが、さらに重要なことに、入力をサブプロセスに戻す方法をまだ理解していません。

String[] command = {"cmd", "/c", "batchfile", "restart"};
ProcessBuilder builder = new ProcessBuilder(command);
builder.directory(new File("C:\\"));
    Process process = builder.start();

InputStream is = process.getInputStream();
    InputStreamReader isr = new InputStreamReader(is);
    BufferedReader br = new BufferedReader(isr);

    String line;
    while ((line = br.readLine()) != null) {
        System.out.println(line);
    }

任意の入力をいただければ幸いです。

4

2 に答える 2

0

バッチ ジョブを続行するには、実際に入力を行う必要があるため、「ハング」しているように見えます。出力ストリームを介して、この入力をプロセスに提供する必要があります。非常に単純化された例:

PrintWriter writer = new PrintWriter(process.getOutputStream());
writer.println("10");
writer.flush();
于 2013-02-16T23:53:37.337 に答える
0

プロセスはハングしません。続行する前に、コマンドラインでの入力を待っているだけです。

を介してプロセスからの出力を読み取っているProcess.getInputStream()ので、 を使用して入力をプロセスに戻すことができますProcess.getOutputStream()

public abstract OutputStream getOutputStream()

サブプロセスの出力ストリームを取得します。ストリームへの出力は、この Process オブジェクトによって表されるプロセスの標準入力ストリームにパイプされます。実装上の注意: 出力ストリームをバッファリングすることをお勧めします。

戻り値: サブプロセスの通常の入力に接続された出力ストリーム。

于 2013-02-16T23:54:54.617 に答える