@fsfsfs32

Как в java записать в исходящий для родителя(входящий для ребенка) поток в ProcessBildere?

jaba
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;

public class test {
    public static void main(String args[]) throws Exception {
        Process pb = new ProcessBuilder().command("php", "php.php", "123").start();
        BufferedReader in = new BufferedReader(new InputStreamReader(pb.getInputStream()));
        PrintWriter out = new PrintWriter(pb.getOutputStream());

        Thread.sleep(1000);
        out.println("321\r\n\r\n");

        System.out.println(in.readLine());
        System.out.println(in.readLine());
        System.out.println(in.readLine());
        System.out.println(in.readLine());
        System.out.println(in.readLine());

    }
}

----------------
pha
<?

$f = fopen("php://stdin","r+");
$read = fread($f,4096);
$read = str_replace("\r\n","",$read);
fclose($f);

echo "3331\n";
echo $argv[1]."\n";
echo "3332\n";
echo $read."\n";
echo "3333\n";


Вывод:
null
null
null
null
null
null

Ожидаемый вывод:
3331
123
3332
321
3333

Почему программа выводит неправильные значения?
  • Вопрос задан
  • 58 просмотров
Пригласить эксперта
Ответы на вопрос 1
Bavashi
@Bavashi
Попробуйте использовать redirectOutput(). В качестве примера возьмите описание из доков:
ProcessBuilder pb = new ProcessBuilder("myCommand", "myArg1", "myArg2");
 Map<String, String> env = pb.environment();
 env.put("VAR1", "myValue");
 env.remove("OTHERVAR");
 env.put("VAR2", env.get("VAR1") + "suffix");
 pb.directory(new File("myDir"));
 File log = new File("log"); // объявили
 pb.redirectErrorStream(true);
 pb.redirectOutput(Redirect.appendTo(log)); // используем и записываем
 Process p = pb.start();
 assert pb.redirectInput() == Redirect.PIPE;
 assert pb.redirectOutput().file() == log;
 assert p.getInputStream().read() == -1;
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы