2011-03-26 7 views
6

linuxでは、PHPからgnome zenityプログレスバーウィンドウを実行したいと思います。どのように動作するかは、次のようになります。PHPからstdinに書き込んでいますか?

linux-shell$ zenity --display 0:1 --progress --text='Backing up' --percentage=0 
10 
50 
100 

したがって、最初のコマンドは、0%のzenityプログレスバーを開きます。 Zenityは標準入力番号をプログレスバーの割合として使用します(したがって、入力すると10%から50%から100%になります)。

私もこれらの数字を入力するPHPを取得する方法を見つけ出すことはできませんが、私が試してみました:

exec($cmd); 
echo 10; 
echo 50; 

そして:

$handle = popen($cmd, 'w'); 
fwrite($handle, 10); 

そして:

$descriptorspec = array(
    0 => array("pipe", "r"), // stdin is a pipe that the child will read from 
    1 => array("pipe", "w") // stdout is a pipe that the child will write to 
); 

$h = proc_open($cmd, $descriptorspec, $pipes); 

fwrite($pipes[1], 10); 

をしかし、どれも進行状況バーを更新しません。どのようにして、進捗バーを更新するために、Linuxシェル上のstdinの効果を模倣することができますか?

答えて

6

あなたが最初に入力したテキストではなく、現在のスクリプトのstdinのコピーでコマンドを実行します。

改行を忘れているために秒が失敗します。代わりにfwrite($handle, "10\n")を試してください。 EOFに達したとき(たとえば、PHPスクリプトの最後に暗黙のうちに$handleが終了した場合など)、zenityが100%にジャンプするように見えることに注意してください。

あなたが改行を忘れていて、あなたが間違ったパイプに書き込んでいるため、3番目の人が失敗します。代わりにfwrite($pipes[0], "10\n")を試して、上記と同じEOFに関するメモを覚えておいてください。

+0

ありがとうございます!私は改行を忘れてしまったとは思わない! :) – hamstar

関連する問題