2016-06-28 21 views
1

私はPHPを使用して呼び出され、結果をリアルタイムで表示するPythonを使用して長いプロセスを行う必要があります。PHPを使用してシェルを実行し、結果をリアルタイムに表示

これは私のPythonスクリプト(a.py)です。

import time 

for x in range(10): 
    print "S;adasdasd;",x 
    time.sleep(0.5) 

私はインターネットから多くの例を試しましたが、常に同じ結果が得られます。 PHPは、スクリプトが完了してから表示されるまで常に待機します。

これは私が試みた非常に多くのコードの1つです。

header('Content-type: text/html; charset=utf-8'); 
    $handle = popen('python folder\\a.py', 'r'); 
    while (!feof($handle)) { 
      echo fgets($handle); 
      flush(); 
      ob_flush(); 
    } 
    pclose($handle); 

私は何かを見逃しましたか?

+0

PHPで文字セットをヘッダーとして追加してみてください。参照してください:http://stackoverflow.com/a/12740522/128161 –

+0

同じ結果が得られましたが、 私は質問を更新しました –

+0

'fread($ handle、1024); 'fgets'の代わりに'? –

答えて

2

PHPは、スクリプトが完了してから表示されるまで常に待機します。

この場合、PHPの問題ではありません。それはPythonが標準出力をパイプに完全にバッファリングするためです。幸いなことに、Pythonはそう

$handle = popen('python -u folder\\a.py', 'r'); 

を使用して問題を解決し、stdoutとstderrバッファリングを無効にするための便利なオプション-uを持っています。 Disable output bufferingも参照してください。

+1

遅くて申し訳ありませんが、遅く応答します.. それは完璧に動作します –

+1

これは本当に解決されています。それはそれほど簡単ではないと信じられない。 – user5740843

関連する問題