Я пытаюсь записать на стандартный ввод подпроцесса (оба являются Java-приложениями). Чтение вывода процесса работает нормально, но ввод с использованием PrintStream
или PrintWriter
не работает. Вот пример программы, которую я написал для проверки странного поведения и запустил ее без аргументов. Затем выполняется та же программа, что и подпроцесс. Подпроцесс просто считывает ввод и отображает его на выходе. Основной процесс принимает стандартный ввод, записывает его на вход подпроцесса и выводит вывод подпроцесса на стандартный вывод.
Проблема в том, что это не работает. 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();
}
}
}
}
main
дочернего процесса напрямую в родительском процессе? - person artbristol   schedule 05.11.2012