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 ?
 
os.fork()
pipein, pipeout = os.pipe()
... = os.read(pipein, ...)
os.write(pipeout, ...)
os.close(pipein)
os.close(pipeout)
 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 : 
<code>
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']