6

Linux では、PHP から gnome zenity プログレス バー ウィンドウを実行したいと考えています。Zenity の仕組みは次のとおりです。

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

したがって、最初のコマンドは zenity プログレス バーを 0% で開きます。次に、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 の効果をどのように模倣して、zenity に進行状況バーを更新させることができますか?

4

1 に答える 1

6

最初に、指定したテキストではなく、現在のスクリプトの stdin のコピーを使用してコマンドを実行します。

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

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

于 2011-03-26T15:40:56.340 に答える