web-dev-qa-db-fra.com

Récupérer la sortie de os.execute dans Lua

Lorsque je fais un "os.execute" dans Lua, une console apparaît rapidement, exécute la commande, puis se ferme. Mais existe-t-il un moyen de récupérer la sortie de la console uniquement en utilisant les bibliothèques Lua standard?

42
Drealmer

Je pense que vous voulez cela http://pgl.yoyo.org/luai/i/io.popen io.popen. Mais ce n'est pas toujours compilé.

26
Arle Nadja

Si vous avez io.popen, voici ce que j'utilise:

 fonction os.capture (cmd, raw) 
 local f = assert (io.popen (cmd, 'r')) 
 local s = assert (f: read (' * a ')) 
 f: close () 
 si brut, retourne s end 
 s = string.gsub (s,' ^% s + ',' ') 
 s = string.gsub (s, '% s + $', '') 
 s = string.gsub (s, '[\ n\r] +', '') 
 retourner s 
 fin 

Si vous n'avez pas io.popen, alors popen (3) n'est probablement pas disponible sur votre système, et vous êtes dans un yaourt profond. Mais tous les ports Lua unix/mac/windows auront io.popen.

57
Norman Ramsey

Je ne connais pas Lua spécifiquement mais vous pouvez généralement exécuter une commande comme:

comd >comd.txt 2>&1

pour capturer la sortie et l'erreur dans le fichier comd.txt, puis utilisez les fonctions d'E/S du fichier de langues pour les lire.

C'est ainsi que je le ferais si le langage lui-même ne permettait pas de capturer la sortie standard et les erreurs.

0
paxdiablo