La Communication entre PHP et Python
Je suis en train de construire une interface web pour certains scripts python. La chose est que je dois utiliser le PHP (et pas CGI) et certains des scripts j'exécute prendre un certain temps pour terminer: 5 à 10 minutes. Est-il possible pour PHP pour communiquer avec les scripts et afficher une certaine sorte de l'état d'avancement? Cela devrait permettre à l'utilisateur d'utiliser le site en tant que la tâche s'exécute et afficher un certain statut dans le même temps ou juste un message quand c'est fait.
Actuellement d'utiliser exec() et à la fin j'ai procédé de la sortie. Le serveur est en cours d'exécution sur une machine Windows, donc pcntl_fork ne fonctionnera pas.
ÉDITER PLUS TARD:
À l'aide d'un autre script php pour nourrir la page principale de l'information à l'aide d'ajax ne semble pas fonctionner, car le serveur, il tue (elle atteint le max de temps d'exécution, et je ne veux pas vraiment à cette augmentation, sauf si nécessaire)
Je pensais à la prise en fonction de communication, mais je ne vois pas comment est-ce utile dans mon cas (quelques conseils, peut-être?
Merci
OriginalL'auteur H. Stefan | 2011-05-11
Vous devez vous connecter pour publier un commentaire.
Vous voulez de communication inter-processus. Les Sockets sont la première chose qui vient à l'esprit, vous aurez besoin de définir une prise de écouter pour une connexion (sur la même machine) en PHP et mis en place un socket à connecter de la socket d'écoute en Python et envoyer son statut.
Ont un coup d'oeil à cette programmation socket aperçu de la documentation Python et le Python
socket
du module de la documentation (en particulier les exemples à la fin). Je suis sûr que PHP a les mêmes ressources.Une fois que vous avez une idée plus spécifique de ce que vous voulez construire et ont besoin d'aide, n'hésitez pas à demander un nouveau question sur StackOverflow (si elle n'est pas déjà répondu).
OriginalL'auteur Humphrey Bogart
Je pense que vous auriez à utiliser une meta refresh et peut-être avoir le python écrire l'état dans un fichier et ensuite le php.
Vous pouvez utiliser AJAX aussi bien pour le rendre plus dynamique.
Aussi, il est préférable de ne pas utiliser exec()...qui ouvre un monde de vulnérabilités.
Veuillez vérifier mes "plus tard" modifier " dans le poste principal pour l'ajax.Je pensais à la prise en fonction de communication, mais je ne vois pas comment est-ce utile dans mon cas (quelques conseils, peut-être?)
La sécurité est au sujet d'être aussi paranoïaque que possible. Regardez ce qui est arrivé à Sony avec le PSN; ils ont supposé que l'utilisateur ne serait jamais capable d'altérer leur PS3.
Martinez Vrai, mais cette page n'a qu'internes de la visibilité (pas accessible à l'extérieur de notre réseau). De même, vous avez un point valide
En regardant cela, j'aime le concept de l'écriture à un fichier-- il me semble plus facile que de compter sur les sockets.
OriginalL'auteur Thomas Schultz
Malheureusement, mon ami, je crois que vous aurez besoin d'utiliser les Sockets comme vous l'avez demandé. 🙁 J'ai peu d'expérience de travail avec eux, mais Ce Python Tutoriel sur les Sockets/Programmation Réseau peut vous aider à obtenir le Python socket interaction dont vous avez besoin. (Beau Martinez liens semblent prometteuses.)
Vous auriez également besoin d'obtenir des PHP connexions socket, trop, de sorte qu'il peut demander à obtenir le statut.
Continue sur ce, ma pensée serait que votre script Python va probablement exécute dans une boucle. Ergo, je l'avais mis "Check" pour une demande d'état" à l'intérieur du début d'une partie de la boucle. Il avait la réponse d'un état, bien que la dernière boucle à l'intérieur de ce scénario allait répondre avec une augmentation de l'état, etc..
Bonne chance!
Edit: je pense que l'écriture de fichier recommandation de Thomas Schultz est probablement le plus simple à mettre en œuvre. Le seul bémol est l'attente pour que le fichier soit ouvert-- Vous aurez besoin pour vous assurer que votre PHP et Python scripts ne pas accrocher ou de retour d'échec sans essayer de nouveau.
OriginalL'auteur SoreThumb
Vous pouvez utiliser un queuing service comme Gearman, avec un client en PHP et un travailleur en Python ou vice versa.
Quelqu'un a créé un exemple de configuration ici.
https://github.com/dbaltas/gearman-python-worker
OriginalL'auteur Tim