Forum Programmation.php Remonté en temps réel d'un script externe

Posté par (page perso) .
Tags :
-1
19
mar.
2012

Bonjour,
j'ai un petit problème.
Depuis une page en php je lance un script en python et j'affiche le résultat.
php
//Lancement du script
$date = preg_replace('/([0-9]{2}).([0-9]{2}).([0-9]{4})/', '\\3\\2\\1', $date);
$commande = "python /var/www/devel/liasses/traitement.py -d $date 1>/dev/stdout 2>/dev/stdout";
$execution = passthru($commande);

ça fonctionne bien, mais php attend la fin de l'exécution de mon script python pour remonter les résultats.

traitement.py modifie des fichiers pdf (c'est des plans, il rajoute un numéro d'ordre de fabrication puis fait un gros pdf avec tous les plans à imprimer) donc le script prend quelques minutes pour s'exécuter.
Le truc c'est que j'aurais voulut afficher en temps réel ce qu'il fait, quand je le lance dans le shell, le script m'affiche ligne après ligne les résultats qu'il trouve.
En php il m'affiche tout en bloc une fois qu'il à finis de travailler.

j'ai le même problème avec exec et system, existe t'il un moyen de remonter les résultats au fur à mesure que mon script python les sorts ?

Je vous remercie d'avance

  • # popen ?

    Posté par (page perso) . Évalué à 2.

  • # En coyotant

    Posté par (page perso) . Évalué à 1.

    Pas brut de décofrage non… Par contre

    Piste de coyote n°1
    - Faire tourner l'exec en background. qui crache dans un fichier de log…
    - Faire un meta refresh pour avoir un affichage régulier mais un peu sacaddé je te le concède, ca va pas être sexy… Peux être une surcouche à ajouter en js…

    Piste de coyote n°2 prometteuse ?
    Faire tourner ca dans un shell web… comme anyterm ou ajaxterm ?

    Fuse : j'en Use et Abuse !

    • [^] # Re: En coyotant

      Posté par (page perso) . Évalué à 2.

      Merci
      nickel pour la piste coyote n°1.
      J'ai modifié mon script python pour qu'il enregistre les sorties dans un fichier texte.
      et depuis le navigateur je lis avec un peut de js ce fichier.

      Pour le JS j'ai utilisé ce script si ça peut intéresser quelque.

      En fait c'est pour un intranet, ça permet à une secrétaire de gagner 1h sur un boulot ingrat (imprimer une liste de pdf).

  • # Et simplement en n'utilisant pas de buffer ?

    Posté par . Évalué à 1.

    Salut,

    a tu simplement essayé de mettre -u à ton shebang ?

    #!/usr/bin/python -u
    
    

    La plupart des "vrais langages de programmation" (comprendre autre que shell) utilise un buffer par défaut.

    Ça coûte pas plus cher de tester ?! ;)

Suivre le flux des commentaires

Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.