Вопрос по php, stdin – Многократный ввод с помощью proc_open ()

2

В настоящее время я работаю над онлайн-программой. Я пишу скрипт 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   ответ
3

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

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

Или короче:

fwrite($pipes[0], "4\n5");
fclose($pipes[0]);
Спасибо! Это была проблема :) Devos50

Похожие вопросы