Je suis un programmeur amateur (et relativement nouveau) qui a écrit plusieurs scripts utiles (pour moi) en python pour gérer diverses tâches d'automatisation du système qui impliquent la copie, le changement de nom et le téléchargement de fichiers parmi d'autres activités diverses.
Je voudrais créer une page Web servie à partir de l'un de mes systèmes qui présenterait simplement quelques boutons qui me permettrait d'initier ces scripts à distance.
Le problème est que je ne sais pas par où commencer à chercher comment faire cela. Disons que j'ai un script appelé:
file_arranger.py
Que dois-je faire pour qu'une page Web exécute ce script? Ce n'est pas destiné à la consommation publique, donc tout ce qui est léger serait génial. Pour les points bonus, que dois-je chercher pour fournir à l'internaute la sortie de tels scripts?
edit: La première réponse m'a fait comprendre que j'avais oublié d'inclure qu'il s'agissait d'un système Win2k3.
Cette page sur le site python contient une bonne description et un exemple de ce que vous devez faire pour exécuter un script CGI en python. Commencez par le cas le plus simple en premier. Il suffit de faire un court script qui imprime le HTML.
#!/usr/bin/python #on windows change to your path to the python exe
print "Content-Type: text/html" # HTML is following
print # blank line, end of headers
print "<TITLE>CGI script output</TITLE>"
print "<H1>This is my first CGI script</H1>"
print "Hello, world!"
Lorsque vous essayez cela pour la première fois, le plus difficile est généralement de savoir où placer le script et comment faire en sorte que le serveur Web le reconnaisse et l'exécute. Si vous utilisez un serveur Web Apache, consultez ces étapes de configuration .
Une fois que ce script simple fonctionne, vous devez simplement ajouter une balise de formulaire et de bouton html et utiliser la propriété action pour la faire pointer vers les scripts que vous souhaitez exécuter.
Cette approche simple ne requiert rien d’autre que la bibliothèque standard Python. Créez cette structure de répertoire:
.
|-- cgi-bin
| `-- script.py
|-- index.html
`-- server.py
Vous mettez vos scripts dans le répertoire "cgi-bin", "index.html" contient des liens vers des scripts dans le répertoire "cgi-bin" (vous n'avez donc pas besoin de les taper manuellement, bien que vous puissiez), et "server.py "contient ceci:
import CGIHTTPServer
CGIHTTPServer.test()
Pour exécuter votre serveur, lancez simplement "server.py". C'est ça, pas d'Apache, pas d'autres dépendances.
HTH ...
Tout ce dont vous avez besoin est de le placer dans un répertoire configuré pour exécuter les scripts CGI. Vous devez ensuite ajouter
#!/usr/bin/env python
vers le haut, et il devrait exécuter le script en tant que script python normal si vous y êtes lié. (comme un fichier HTML ou PHP)
Bien entendu, cela suppose que votre serveur Web est configuré pour exécuter CGI et que vous avez un système Linux.
Il existe d'autres solutions alternatives si vous voulez quelque chose d'un peu plus sophistiqué, comme mod_python et des frameworks Web tels que Pylons, mais je pense que la solution CGI conviendrait mieux à votre cas d'utilisation.
[MODIFIER]
Sous Windows, si vous avez Apache, vous devriez pouvoir utiliser la même méthode, mais en remplaçant les éléments derrière le #! avec le chemin d'accès à votre python.exe, comme suit:
#!C:\Python25\python.exe -u
Le -u est apparemment nécessaire pour mettre Python en mode sans tampon selon ce lien, qui contient également des informations plus détaillées: http://www.imladris.com/Scripts/PythonForWindows.html
Un simple script CGI (ou un ensemble de scripts) est tout ce dont vous avez besoin pour commencer. Les autres réponses ont couvert comment faire cela afin que je ne le répète pas; au lieu de cela, je soulignerai que l’utilisation de texte en clair vous mènera loin . Il suffit de sortir l'en-tête (print("Content-type: text/plain\n")
plus print ajoute sa propre nouvelle ligne pour vous donner la ligne vide nécessaire), puis exécutez votre programme normal.
De cette façon, toute sortie normale de votre script est envoyée au navigateur et vous n'avez pas à vous soucier de HTML, de l'échappement, des frameworks, de rien. "Fais la chose la plus simple qui puisse fonctionner."
Ceci est particulièrement approprié pour les tâches administratives privées non interactives telles que celle que vous décrivez et vous permet d'utiliser des programmes identiques à partir d'un shell avec un minimum de tracas. Votre pilote, la page avec les boutons, peut être un fichier HTML statique avec des formulaires à un seul bouton. Ou même une liste de liens.
Pour avancer à partir de là, examinez le module de journalisation (par exemple, en envoyant des messages INFO au navigateur, mais pas en ligne de commande, ou en catégorisant facilement les messages en utilisant différents enregistreurs, en configurant vos gestionnaires), puis commencez à examiner les moteurs de modèles et les infrastructures. .
Don't affichez votre propre code HTML et passez directement à l’une des nombreuses bibliothèques existantes. Cela vous épargnera beaucoup de maux de tête, même si vous passez un peu plus de temps à apprendre la bibliothèque. Ou tout au moins, encapsulez votre sortie en écrivant efficacement votre propre mini-moteur.
Vous devriez regarder dans CherryPy en tant que gestionnaire de requêtes HTTP pouvant être configuré pour s’exécuter sur un serveur très léger NGINX web (ou Apache si vous préférez).
Vous pouvez ensuite importer les autres scripts dans le service que vous exécutez sur CherryPy. Cela vous donnerait un peu plus de contrôle pour surveiller le processus et détecter les erreurs éventuelles.
L’autre option consiste à indiquer simplement au système d’exploitation de déclencher la commande à l’aide de os.system (). Vérifiez ici pour un exemple de différentes approches pour utiliser os.system ().
Si vous connaissez bien Apache ceci , vous devriez commencer.
Dans une question précédente, j'avais demandé une implémentation minimale pour la connexion d'un site Web AJAX à Python . Cela pourrait accomplir ce que vous recherchez. Il comporte un bouton qui déclenche du code Python puis affiche le résultat sur la page. Ma solution utilise le serveur Web intégré à Python. Elle est donc très légère (pas de paquet supplémentaire ni Apache).
Lors de la configuration, s'il vous plaît veillez à limiter l'accès aux scripts exécutant des actions sur votre serveur Web. Il ne suffit pas de les placer dans un répertoire dans lequel vous ne publiez pas l'URL, car tôt ou tard, quelqu'un les trouvera.
À tout le moins, placez ces scripts dans un emplacement protégé par mot de passe. Vous ne voulez pas que n'importe qui sur Internet puisse exécuter vos scripts.
Si vous utilisez maintenant Python 3, print est une fonction nécessitant une parenthèse.
#!/Python34/python
print ("Content-type: text/html\n")
print ("<html><head>")
print ("</head><body>")
print ("Hello World from Python Script.")
print ("</body></html>")