サブプロセスの stdin に書き込もうとしています (どちらも Java アプリです)。PrintStream
プロセスの出力の読み取りは正常に機能しますが、またはを使用した入力は機能しませんPrintWriter
。これは、私が引数なしで実行する奇妙な動作をテストするために書いたサンプル プログラムです。次に、同じプログラムをサブプロセスとして実行します。サブプロセスは、入力を読み取り、それを出力にエコーするだけです。メイン プロセスは stdin を受け取り、それをサブプロセスの入力に書き込み、サブプロセスの出力を stdout に出力します。
問題は、これが機能しないことです。サブプロセスのは親プロセスnextLine()
のステートメントと一致しないため、サブプロセスは何も出力しません。println()
なぜこれが起こっているのですか、どうすれば修正できますか(メインプロジェクトの子プロセスを変更できないため、できれば親プロセスで)。
import java.lang.*;
import java.io.*;
import java.util.Scanner;
public class ProcTest{
public static Scanner stdin;
public static String line;
public static Process sub;
public static BufferedReader childout;
public static PrintWriter childin;
public static void main(String[] args){
stdin = new Scanner(System.in);
if(args.length > 0 && args[0].equals("y")){
while(true){
line = stdin.nextLine();
System.out.println(line);
}
}else{
try{
sub = Runtime.getRuntime().exec("java ProcTest y");
childout = new BufferedReader(new InputStreamReader(sub.getInputStream()));
childin = new PrintWriter(sub.getOutputStream());
while(true){
childin.println(stdin.nextLine());
childin.flush();
while(childout.ready()) System.out.println( childout.readLine() );
}
}catch(IOException e){
e.printStackTrace();
}
}
}
}