Récupération des commandes :

Récupération des commandes :

C'est l'avant dernier chapitre de ce tutoriel. Il va porter sur l'exécution de commandes systèmes, leur récupération, et leur transfert à travers le réseau.

Exécution de commandes systèmes :

Vous vous rappelez sûrement de la méthode "system" du module "os"... :

Code : python
import os ;
#plein de code partout
os.system (commande) ;

C'est bien ... . Ceux parmi vous qui ont un peu d'expérience avec un Shell savent que pour stocker le résultat dans un fichier texte on fait :

Code : bash/batch

commande>fichier.txt

Les plus intelligents parmi vous auront compris de quoi je parle.

Vous vous dites qu'en stockant le résultat de la commande dans un fichier texte que vous ouvrirez en lecture plus tard fera l'affaire. On essaye et on verra ce qui se passe.

Récupérer le résultat d'une commande :

Les limites de "system" :

J'espère que vous savez vous servir des fichiers car on en aura besoin pour la suite.

On va tout d'abord coder le programme sur lequel on s'était mis d'accord tout à l'heure (voir plus haut) :

Code : python
import os ;

while 1 :
  comm = raw_input("Enter system command : ") ;

  if comm == "exit" :
    break ;

  os.system(comm + ">fSorite.txt") ;

  try :
    file = open ("fSortie.txt","r") ;
  except :
    print ("file : fSortie.txt is unavailable\n") ;
    exit (False) ; #on quitte de suite

  print file.readlines () ;
  file.close() ;

raw_input () ;
exit (True) ;

echo Au revoir>autreFichier.txt>fSortie.txtVotre programme à l'air de bien fonctionner, mais le problème survient quand on veut par exemple exécuter le résultat d'une commande dans un autre fichier :

Le résultat est un grand n'importe quoi car au lieu d'avoir un fichier texte "autreFichier.txt" contenant "Au revoir" nous auront un fichier "fSortie.txt" qui contiendra "Au revoir>autreFichier.txt".
Vous voyez maintenant d'où vient le problème. Pour le palier on va utiliser ...

Une alternative intéressante :

L'alternative que je vous propose est d'utiliser une méthode du module os qui va exécuter une commande système et créer un flux ouvert en lecture pour récupérer le résultat, son utilisation est similaire à celle des fichiers. Cette méthode n'est ni plus ni moins que "popen". Voici un exemple d'utilisation :

Code : python
import os ;
while 1 :
  comm = raw_input ("Enter system command : ") ;

  if comm == "exit" :
    break ;

  pp = os.popen (comm,"r") ; #la commande est exécutée et le flux est créé

  for line in pp.readlines() : #la lecture est sous forme de tableau
    print (line) ;

  pp.close () ; #on ferme le flux

exit (True) ;

Vous voyez que cette manière de procéder est beaucoup plus simple, surtout qu'elle est plus propre et ne nécessite pas l'utilisation des fichiers, bref,une méthode qui fait notre bonheur

Transfert à travers le réseau :

C'est tout simple, on utilise la méthode send (string) (envoie), et recv (buff_size),(réception) avec les objets qu'ont renvoyé les fonctions écrites dans le chapitre précédent.