Множественный ввод с открытым процессом()


В настоящее время я работаю над онлайн-программой. Я пишу php-скрипт, который выполняет команду в командной строке с помощью proc_open() (под Linux Ubuntu). Это мой код до сих пор:

<?php
$cmd = "./power";

$descriptorspec = array(
   0 => array("pipe", "r"),
   1 => array("pipe", "w"),
   2 => array("pipe", "w"),
);

$process = proc_open($cmd, $descriptorspec, $pipes);

if (is_resource($process)) {

    fwrite($pipes[0], "4");
    fwrite($pipes[0], "5");
    fclose($pipes[0]);

    while($pdf_content = fgets($pipes[1]))
    {
        echo $pdf_content . "<br>";
    }
    fclose($pipes[1]);

    $return_value = proc_close($process);
}
?>

Power - это программа, которая запрашивает ввод 2 раза (она берет базу и показатель степени и вычисляет базовый ^ показатель степени). Это написано в сборке. Но когда я запускаю этот скрипт, я получаю неверный вывод. Мой вывод "1", но я ожидаю 4^5 в качестве вывода.

Когда я запускаю программу, которая принимает один ввод, она работает (я протестировал простую программу, которая увеличивает введенное значение на единицу).

Я думаю, что мне чего-то не хватает в команде fwrite. Кто-нибудь может мне помочь, пожалуйста?

Заранее спасибо!

Author: Devos50, 2012-06-04

1 answers

Вы забыли записать новую строку в канал, поэтому ваша программа будет думать, что она получила только 45 в качестве входных данных. Попробуйте это:

fwrite($pipes[0], "4");
fwrite($pipes[0], "\n");
fwrite($pipes[0], "5");
fclose($pipes[0]);

Или короче:

fwrite($pipes[0], "4\n5");
fclose($pipes[0]);
 2
Author: Emil Vikström, 2012-06-04 11:50:31