質問

Linuxでは、PHPからGNOME Zenity Progress Barウィンドウを実行したいです。Zenityの作品はこのようなものです。

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

だから最初のコマンドは0パーセントでゼニーの進行状況バーを開きます。その後、Zenityは進捗バーの割合として標準の入力番号を取得します(したがって、それらの数字を入力すると10%から50%になります)。

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);
.

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

役に立ちましたか?

解決

最初に現在のスクリプトのSTDINのコピーを使用してコマンドを実行します。

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

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top