==== FAQ : Du Web aux Web Services en Python ====
== Comment écrire un chemin de fichier indépendant de l'OS ? ==
on dispose également de la fonction os.path.join( chemin1, chemin2) qui permet de concaténer des chemins simplement en respectant les convention de l'OS de support :
chemin=os.getenv('HOME')
chemin=os.path.join(chemin,'Bureau')
print (chemin)
/home/user/Bureau
== Comment utiliser les pipes en python ?==
* Le module os (import os) en python vous permet d'avoir accès à une API proche de POSIX dans laquelle vous trouvez :
os.fork()
pipein, pipeout = os.pipe()
... = os.read(pipein, ...)
os.write(pipeout, ...)
os.close(pipein)
os.close(pipeout)
* Python permet aussi d'accéder à une struture de pipes à la création d'un processus. Voici quelques explications :
myPopen = subprocess.Popen(['cat', '-n']) : fait l'appel système non bloquant.
si on veut pouvoir envoyer des données sur le stdin du process, il faut faire : myPopen = subprocess.Popen(['cat', '-n'], stdin = subprocess.PIPE).
si on veut pouvoir récupérer des données de la sortie standard et de la sortie d'erreur du process, il faut faire :
myPopen = subprocess.Popen(['cat', '-n'], stdout = subprocess.PIPE, stderr = subprocess.PIPE).
myPopen.stdin, myPopen.stdout, myPopen.stderr : les entrées et sorties standard, quand elles ont été mises a subprocess.PIPE dans le constructeur. myPopen.stdout est de la classe file.
Exemple :
import subprocess
s = subprocess.Popen(['bc','-q'],stdin = subprocess.PIPE, stdout = subprocess.PIPE, stderr = subprocess.STDOUT)
...
s.stdin.write(cmde+'\n')
s.stdin.flush()
res = s.stdout.readline()
print "Resultat:",res
s.stdin.close()
s.stdout.close()
== Commment puis-je détecter le type d'invocation GET ou POST de mon cgi-bin ? ==
L'information se trouve dans le champ d'entête du message HTTP. Il s'agit de RequestMethod.
== Commment savoir que le message HTTP à lire est fini ? ==
Le test de fin se basera sur la taille du message qui se trouve dans un champ d'entête du message HTTP. Il s'agit de Content-Lenght.
== Comment accéder aux variables d’environnement en Python ? ==
Tout cgi-bin doit pouvoir s’appuyer sur les paramètres qui lui sont destinés et qui ont été collectés dans la variable d’environnement QUERY_STRING.
En conséquence le serveur doit être capable de préparer des variables d’environnement avant de lancer le cgi-bin.
Pour obtenir une variable d'environnement avec Python vous pouvez utiliser le module os et la variable environ avec par exemple :
import os
...
if os.environ.has_key('nom_de_la_cle'):
print os.environ['nom_de_la_cle']