使用proc_open()进行多次输入

时间:2012-06-04 11:37:02

标签: php stdin proc-open

我目前正在开展在线课程。我正在编写一个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次(它需要一个基数和一个指数并计算base ^指数)。它是用大会写的。但是当我运行这个脚本时,输出错误了。我的输出为“1”,但我希望输出为4 ^ 5。

当我运行一个输入一个输入的程序时,它可以工作(我测试了一个简单的程序,将输入的值增加1)。

我想我错过了关于fwrite命令的一些内容。有人可以帮帮我吗?

提前致谢!

1 个答案:

答案 0 :(得分: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]);