« Programmation Ruby/Syntaxe » : différence entre les versions

Contenu supprimé Contenu ajouté
→‎Expressions : +appels système, les quatres possibilitées : quotes inversées (``), IO.popen, system et exec.
Ligne 273 :
c => 42
d => nil
 
= Appels système =
Les appels système peuvent se faire de différentes manières
 
== Quotes inversées ==
Appel d'une commande et recupération de la sortie dans un tableau
system_name = `uname` => "Linux\n"
system_name = `uname -a` => "Linux machine 2.6.22.5 #2 SMP Fri Aug 25 14:31:07 CEST 2006 i686 unknown\n"
Pour passer des variables, il faut absolument entourer la variable de #{}
par exemple avec :
arg = "-a" => "-a"
 
si l'on se contente de mettre #a
system_name = `uname #arg` => "" l'argument #a est passé et non la valeur de a, ce qui retourne l'erreur :
Try `uname --help' for more information.
 
Par contre :
system_name = `uname #{arg}` => "Linux machine 2.6.22.5 #2 SMP Fri Aug 25 14:31:07 CEST 2006 i686 unknown\n"
 
== IO.popen ==
Une bidouille consiste à utiliser la commande IO.popen :
commande = IO.popen("uname -a") => #<IO:0x53963888>
 
On peut alors recuperer la sortie de la commande avec :
sortie = commande.readlines => "Linux machine 2.6.22.5 #2 SMP Fri Aug 25 14:31:07 CEST 2006 i686 unknown\n"
 
Il est biens ur possible de concatener en une seule ligne avec :
sortie = IO.popen("uname -a").readlines => "Linux machine 2.6.22.5 #2 SMP Fri Aug 25 14:31:07 CEST 2006 i686 unknown\n"
 
Et de concatener la commande et les arguments :
arg = "-a"
sortie = IO.popen(["uname",arg].join(" ")).readlines => "Linux machine 2.6.22.5 #2 SMP Fri Aug 25 14:31:07 CEST 2006 i686 unknown\n"
 
Mais cela devient plus compliqué qu'avec les simples quotes inversées.
 
== Commande system ==
On peut également utiliser la commande ''system''. Elle retourne le code retour de la commande et affiche la sortie de la commande sur la sortie standard.
a = system("uname -a") => true
et à l'écran :
Linux machine 2.6.22.5 #2 SMP Fri Aug 25 14:31:07 CEST 2006 i686 unknown
 
== Commande exec ==
La commande exec, execute la commande puis quitte definitivement ruby, donc pas de retour
exec("uname -a")
 
Quitte le programme en affichant la sortie standard :
 
Linux machine 2.6.22.5 #2 SMP Fri Aug 25 14:31:07 CEST 2006 i686 unknown
bash $
 
[[Catégorie:Programmation Ruby (livre)]]