2010-11-29 6 views
1

J'ai une application Python (outil de ligne de commande fonctionnant sur une machine M1) qui a l'entrée I1 et la sortie O2. De plus, j'ai une application PHP (site web fonctionnant sur une machine M2) qui alimente l'application Python avec l'entrée I1 et s'attend à lire la sortie O1. Ma question est quelle est la meilleure approche pour résoudre ce problème? (l'environnement est GNU/Linux)Interface PHP et Python

Je pensais à une solution avec ssh; le script PHP exécute une commande via ssh: "ssh M2: ./ my_script.py arguments output_file" et transfère le fichier de sortie "scp M2: output_file." de M2 ​​à M1. Mais je ne pense pas que cette solution soit élégante. Je pensais aux services Web (l'application Python devrait exposer un service Web), mais je ne suis pas sûr de la complexité de cette solution ou si cela fonctionne.

Merci,

+0

En fait, une interface webservice ajoute de la complexité. Le tuyau SSH est la solution optimale. (Un service inetd serait également possible, mais en général trop de problèmes de sécurité.) – mario

+0

Je ne suis pas d'accord, car une pipe SSH est très rigide, par exemple si le site de Laurentiu devient grand, il serait presque impossible pour lui d'envoyer le php les requêtes du serveur à un cluster de machines, alors qu'un serveur xmlrpc ou quelque chose de similaire lui permet de router vers des machines différentes. –

Répondre

1

Comme d'autres ci-dessus, je le ferais en implémentant un service Web plutôt que de jouer avec SSH. Vous avez raison de dire que la solution SSH est inélégante.

La réponse évidente pour ce qui est de construire votre application web Python en plus de: Django. Si vous voulez utiliser quelque chose de plus léger, regardez un microframework comme Flask. Pour l'échange de données, JSON est votre meilleur pari - supporté par Python et PHP maintenant.

+0

Votre solution semble bonne, mais elle crée le besoin d'un serveur Web (par exemple Apache) sur les machines. Je vais le considérer pour la mise en œuvre. –

0

Je pense que vous devriez implémenter un service Web. Je ne sais pas comment le faire avec python mais je suppose que ce serait assez facile.

0

Configurez un petit serveur sur M1 en utilisant twisted (ou quelque chose de similaire), qui exécute la commande lorsqu'il est frappé avec une requête XML. Puis retournez la sortie au côté php. Donc le php envoie juste une requête avec input1 à M1, et M1 renvoie une réponse avec O1 (ou O2? Votre abréviation est déroutante: P). C'est très KISS, et devrait bien évoluer. Je n'ai aucune idée de comment le côté php fonctionnerait, mais tordu est extreamly bien documenté. Jetez un oeil à this lien pour une idée sur la façon de mettre en place un serveur torsadé simple.

+0

O1 = O2, désolé pour la confusion. Merci pour le conseil. –

0

Si O1 = O2, vous pouvez les laisser communiquer avec un protocole binaire sur un fichier socket. Comme Hessian ou Thrift. Étant donné que vous exécutez vos applications sur un serveur * nix, cela devrait être très rapide.