-
Exécution commande shell
Bonjour à tous,
Tout d'abord j'espère ne pas me tromper de section pour poser ma question.
J'ai sur un serveur linux (CentOS) un module webmin constitué de pages perl.
Dans une de celles-ci, j'affiche le résultat de commandes shell.
Exemple :
$cmd=`ls /`;
print "<pre>".$cmd."</pre>";
Seulement voilà, cette fois-ci, j'aimerais afficher en temps réel la réponse de la commande exécutée (car ça va être une commande un peu plus longue). [un top par exemple]
J'ai testé ma commande, elle fonctionne. Une fois qu'elle a fini de s'exécuter, elle affiche le résultat. Mais ce que j'aimerais c'est qu'elle affiche le résultat PENDANT que la commande tourne... (commande qui prend environ 5minutes à s'exécuter).
D'ou ma question, comment faire cela?
Merci d'avance pour vos réponses
-edit-
Peut-etre y'a-t-il un moyen pour envoyer la commande en tache de fond et tant qu'elle y est, afficher la valeur de ma variable ?
Un exemple :
$cmd=`service vsftpd restart`;
print $cmd;
va me retourner
Shutting down vsftpd: [ OK ]
Starting vsftpd for vsftpd: [ OK ]
Ce que j'aimerais c'est pouvoir afficher 1 à 1 ces lignes et pas devoir attendre que la commande ait rendu la main pour tout afficher d'un coup...
(peut-etre est-ce plus clair comme ça ^^)
-
La réponse est que ce n'est pas faisable facilement. Pour la bonne et simple raison qu'une page web, c'est statique par essence. Pour faire cette affichage, il faudrait :
- soit faire de l'ajax
- soit faire un rafraichissement de la page (appelé par elle même)
Bref, rien d'évident.
-
J'ai pris le temps d'apprendre l'ajax suivant vos conseils.
Cependant, je ne vois toujours pas l'intérêt. Le résultat d'une commande shell ne s'affichant qu'une fois celle-ci terminée...
Lancer un "print `service vsftpd restart`;" n'affichera le résultat de la commande qu'une fois exécutée... Quel est alors l'intérêt d'aller la lancer depuis une autre page ?
Je cherche surtout un moyen de pouvoir récupérer le résultat d'une commande shell lancée depuis un script perl PENDANT qu'elle s'exécute :s
-
A mettre en début de code :
Ca évite la bufferisation de la page, le contenu est donc affiché à mesure qu'il arrive.
Après, histoire de ne pas stocker le résultat (qui annulerait l'intérêt du code ci dessus), je ferais directement un
Code:
print `service vsftpd restart`;
@+
Mr6