2012-06-04 70 views
1

我目前正在從事在線程序。我在寫一個php腳本,它在命令行中用proc_open()(在Linux Ubuntu下)執行命令。這是到目前爲止我的代碼:多個輸入與proc_open()

<?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); 
} 
?> 

功率是,對於輸入2次詢問(它需要一個底座和一個指數並計算基礎^指數)的程序。它是用Assembly編寫的。但是當我運行這個腳本時,我得到錯誤的輸出。我的輸出是「1」,但我期望4^5作爲輸出。

當我運行一個程序,需要一個輸入,它的工作原理(我測試了一個簡單的程序,將輸入的值遞增1)。

我想我錯過了關於fwrite命令的一些東西。任何人都可以幫我嗎?

在此先感謝!

回答

2

你忘了寫管道的換行符,所以你的程序會認爲它只有45作爲輸入。試試這個:

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

或更短:

fwrite($pipes[0], "4\n5"); 
fclose($pipes[0]); 
+0

謝謝!這是問題:) – Devos50