Analyser les arguments avec Lua | Opensource.com

La plupart des commandes informatiques se composent de deux parties : la commande et les arguments. La commande est le programme destiné à être exécuté, tandis que les arguments peuvent être des options de commande ou une entrée utilisateur. Sans cette structure, un utilisateur devrait modifier le code de la commande uniquement pour modifier les données traitées par la commande. Imaginez réécrire la commande printf juste pour que votre ordinateur vous accueille avec un message “hello world”. Les arguments sont essentiels à l’informatique interactive, et le langage de programmation Lua fournit la {…}
expression pour encapsuler les varargs donnés au moment du lancement d’un script Lua.
Utiliser des arguments en Lua
Presque chaque commande donnée à un ordinateur suppose un argument, même s’il s’attend à ce que l’argument soit une liste vide. Lua enregistre ce qui est écrit après son lancement, même si vous ne faites rien avec ces arguments. Pour utiliser les arguments fournis par l’utilisateur au démarrage de Lua, parcourez le {…}
table:
local args = {...}for i,v in ipairs(args) do
print(v)
end
Exécutez le code :
$ lua ./myargs.lua
$ lua ./myargs.lua foo --bar baz
foo
--bar
baz
----
N’avoir aucun argument est sûr, et Lua imprime tous les arguments exactement tels qu’ils ont été saisis.
Analyser les arguments
Pour les commandes simples, les facultés de base de Lua sont suffisantes pour analyser et traiter les arguments. Voici un exemple simple :
-- setuplocal args = {...}
-- engine
function echo(p)
print(p)
end-- go
for i,v in ipairs(args) do
print(i .. ": " .. v)
endfor i,v in ipairs(args) do
if args[i] == "--say" then
echo("echo: " .. args[i+1])
end
end
Dans le setup
section, vider tous les arguments de commande dans une variable appelée args
.
Dans le engine
section, créez une fonction appelée echo
qui imprime tout ce que vous y “alimentez”.
Enfin, dans le go
section, analysez l’index et les valeurs dans la args
variable (les arguments fournis par l’utilisateur au lancement). Dans cet exemple de code, le premier for
loop imprime simplement chaque index et valeur pour plus de clarté.
La deuxième for
loop utilise l’index pour examiner le premier argument, qui est supposé être une option. La seule option valide dans cet exemple de code est --say
. Si la boucle trouve la chaîne --say
il appelle le echo
fonction, et l’index de l’argument courant plus 1 (la Suivant argument) est fourni comme paramètre de la fonction.
Le délimiteur des arguments de commande est un ou plusieurs espaces vides. Exécutez le code pour voir le résultat :
$ lua ./echo.lua --say zombie apocalypse
1: --say
2: zombie
3: apocalypse
echo: zombie
La plupart des utilisateurs apprennent que les espaces sont importants lorsqu’ils donnent des commandes à un ordinateur, donc la suppression du troisième argument, dans ce cas, est un comportement attendu. Voici une variante pour démontrer deux méthodes “d’échappement” valides :
$ lua ./echo.lua --say "zombie apocalypse"
1: --say
2: zombie apocalypse
echo: zombie apocalypse$ lua ./echo.lua --say zombie\ apocalypse
1: --say
2: zombie apocalypse
echo: zombie apocalypse
Analyser les arguments
L’analyse manuelle des arguments est simple et sans dépendance. Cependant, il y a des détails que vous devez considérer. La plupart des commandes modernes permettent des options courtes (par exemple, -f
) et les options longues (--foo
), et la plupart offrent un menu d’aide avec -h
ou --help
ou lorsqu’un argument requis n’est pas fourni.
L’utilisation de LuaRocks facilite l’installation de bibliothèques supplémentaires. Il y en a de très bons, comme alt-getopt, qui fournissent une infrastructure supplémentaire pour l’analyse des arguments.