Множественный ввод с открытым процессом()
В настоящее время я работаю над онлайн-программой. Я пишу 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. Кто-нибудь может мне помочь, пожалуйста?
Заранее спасибо!
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]);