J'aimerais imprimer une liste de tous les Variables d'environnement et leurs valeurs. J'ai cherché The Stackoverflow et les questions suivantes se rapprochent mais ne me répondez pas: P>
Contrairement à C, Lua n'a pas EVL ** ** PARAMETER qui est transmis à
Main () Code> Donc, je n'ai pas pu trouver un moyen d'obtenir une liste de tous les environnements variables. Est-ce que quelqu'un sait que je peux obtenir la liste
5 Réponses :
Les fonctions Standard Lua sont basées sur des fonctions standard C. Il n'existe aucune fonction C-standard pour obtenir toutes les variables d'environnement. Par conséquent, il n'y a pas de fonction standard Lua pour le faire non plus. P>
Vous devrez utiliser un module comme Luaex , qui fournit cette fonctionnalité. P>
@Alexstack: Pas tout à fait. argv code> fait référence aux arguments de ligne de commande transmis au programme.
Envple code> fait référence aux variables d'environnement, mais elle n'est pas standard.
Ce code a été extrait d'une ancienne liaison POSIX.
static int Pgetenv(lua_State *L) /** getenv([name]) */ { if (lua_isnone(L, 1)) { extern char **environ; char **e; if (*environ==NULL) lua_pushnil(L); else lua_newtable(L); for (e=environ; *e!=NULL; e++) { char *s=*e; char *eq=strchr(s, '='); if (eq==NULL) /* will this ever happen? */ { lua_pushstring(L,s); lua_pushboolean(L,0); } else { lua_pushlstring(L,s,eq-s); lua_pushstring(L,eq+1); } lua_settable(L,-3); } } else lua_pushstring(L, getenv(luaL_checkstring(L, 1))); return 1; }
Eh bien, c'est un moyen de résoudre le problème en utilisant C. Apparemment, il n'y a pas de fonction pure-lua qui le fait. Merci quand même.
@Alexstack, comme mentionné Nicol, il n'y a pas de fonction PURE-LUA car Environ code> n'est pas Ansi C, Just Posix.
Vous pouvez installer le module Lua-Posix. Alternativement, les installations de RedHat ont des routines de POSIX intégrées, mais pour leur permettre, vous devez faire une astuce: L'astuce consiste à créer une liaison logicielle vers le répertoire "IO" du RPM et à nommer la liaison molle, le même nom de la bibliothèque Lua tentera d'ouvrir. Si vous ne le faites pas, vous obtenez: p> ou similaire. P> p>
local osEnv = {} for line in io.popen("set"):lines() do envName = line:match("^[^=]+") osEnv[envName] = os.getenv(envName) end this would not work in some cases, like "no valid shell for the user running your app"
Il pourrait également échouer si des noms ou des valeurs variables d'environnement contiennent des nouvelles lignes ou d'autres caractères drôles.
une doublure facile 2:
buf = io.popen("env", '*r') output = buf:read('*a') print(output) -- or do whatever