Pour le cli tu veux te connecté directement (via ssh ou genre putty) et executé tes commandes en directe ou envoyer juste la commande à executé via le réseau web comme le CGI ?
Non, le mode CLI, c’est pour exécuter directement sur ma machine, comme n’importe quel autre de mes scripts. Le mode CGI est un « bonus » pour mes collègues, mais j’écris mes scripts aussi pour moi-même et la ligne de commande est pour moi une interface beaucoup plus naturelle qu’un formulaire dans un navigateur.
Pour l’instant, ce que je fais ressemble à peu près à ça (en un peu moins à LA RACHE quand même) :
#!/usr/bin/pythonimportsys,os,getopt,cgiif__name__=='__main__':# Valeurs par défaut des optionsoperation='intersection'format='csv'ifos.getenv('GATEWAY_INTERFACE'):# mode CGI, on récupère les paramètres de la requête CGIform=cgi.FieldStorage()iflen(form)==0:# il n’y en a pas? on affiche le formulaire# qui permettra à l’utilisateur de saisir les paramètresprint"""Content-Type: text/html<html> <body> <form action="script.py" method="post" enctype="multipart/form-data"> <p>Operation to perform:</p> <p><input type="text" name="operation" /></p> <p>Output format:</p> <p> <select name="format"> <option value="xml">XML</option> <option value="csv">CSV</option> </select> </p> <p><input type="submit" name="submit" /></p> </form> </body></html>"""# et on termine là pour l’instant, la soumission du# formulaire lancera une nouvelle exécution du scriptsys.exit(0)else:# Il y a des paramètres ? Bien. On les analyse, on# vérifie que tout est correct (les paramètres obligatoires# sont bien présents, les valeurs sont dans les limites# attendues, etc.)...operation=form['operation']format=form['format']else:# Pas de variable GATEWAY_INTERFACE ? On est en mode CLI,# on parse la ligne de commandetry:opts,args=getopt.getopt(sys.argv[1:],'o:f:',['operation=','format='])exceptgetopt.GetoptError:sys.exit(1)foro,ainopts:ifoin('-o','--operation'):operation=aelifoin('-f','--format'):format=a# Arrivé ici, on a les paramètres dont on a besoin dans les# les variables 'operation' et 'format', on peut commencer# le vrai travail que le script est supposé faire, et qui# est indépendant de la manière dont le script a été appelé# (ou presque : en mode CGI, il faut quand même penser à faire# précéder la sortie d’un en-tête Content-Type)
Et ce que je voudrais, c’est pouvoir faire la même chose avec moins de code, genre quelque chose comme ça :
#!/usr/bin/pythonimportModuleMagiqueif__name__=='__main__':m=ModuleMagique.ObjetMagique()m.addOption('operation','o','Operation to perform')m.addOption('format','f','Output format',allowedValues=['csv','xml'],defaultValue='csv')m.getArgumentsOrDie()# Si on arrive ici, c’est que le script a été appelé avec les bons# arguments (que ce soit en mode CLI ou en mode CGI), on peut# faire ce qu’on a à faireoperation=m.arguments['operation']format=m.arguments['format']
Ce que je cherche, et que je suis éventuellement prêt à (削除) développer (削除ここまで) bricoler moi-même, c’est ce fameux ModuleMagique...
[^] # Re: re
Posté par gouttegd . En réponse au message Scripts avec une double interface CLI / CGI. Évalué à 2.
Non, le mode CLI, c’est pour exécuter directement sur ma machine, comme n’importe quel autre de mes scripts. Le mode CGI est un « bonus » pour mes collègues, mais j’écris mes scripts aussi pour moi-même et la ligne de commande est pour moi une interface beaucoup plus naturelle qu’un formulaire dans un navigateur.
Pour l’instant, ce que je fais ressemble à peu près à ça (en un peu moins à LA RACHE quand même) :
Et ce que je voudrais, c’est pouvoir faire la même chose avec moins de code, genre quelque chose comme ça :
Ce que je cherche, et que je suis éventuellement prêt à
(削除) développer (削除ここまで)bricoler moi-même, c’est ce fameuxModuleMagique...