Question

Dans Linux, je veux exécuter une fenêtre de barre de progression Gnome Zenity de PHP. Comment fonctionne Zenity est ceci:

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

Ainsi, la première commande ouvre la barre de progression de Zenity à 0%. Zenity prend ensuite des nombres d'entrée standard en pourcentage de la barre de progression (il passera donc de 10% à 50% à 100% lorsque vous tapez ces chiffres).

Je ne peux pas comprendre comment faire taper PHP dans ces chiffres, j'ai essayé:

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

Et:

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

Et:

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

Mais aucun d'entre eux ne met à jour la barre de progression. De quelle manière puis-je imiter l'effet du stdin sur la coque Linux pour que Zenity mette à jour sa barre de progrès?

Était-ce utile?

La solution

Votre premier exécute la commande avec une copie du STDIN du script actuel, pas le texte que vous fournissez.

Votre seconde échoue parce que vous oubliez la nouvelle ligne. Essayer fwrite($handle, "10\n") Au lieu. Notez que Zenity semble passer à 100% lorsque l'EOF est atteint (par exemple par la fermeture implicite de $handle à la fin de votre script PHP).

Votre tiers échoue parce que vous oubliez la nouvelle ligne et que vous écrivez dans le mauvais tuyau. Essayer fwrite($pipes[0], "10\n") Au lieu de cela, et rappelez-vous la même note concernant l'EOF que ci-dessus.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top