obtenez répertoire de travail actuel en Lua
Quel est le Lua pour obtenir le répertoire de travail courant sur Windows XP SP3 (ou pour obtenir le répertoire de la actuellement en cours d'exécution fichier Lua)? Je préfère pas à utiliser LuaFileSystem.
Je ne peux pas utiliser os.execute("cd")
parce que os.execute
démarre toujours à partir de mon répertoire home (et donc donne toujours C:\Documents and Settings\username
).
OriginalL'auteur | 2011-05-17
Vous devez vous connecter pour publier un commentaire.
Lua par défaut n'a pas un "natif" moyen de soutenir le concept de "répertoire courant", ou, en fait, le concept de "répertoire".
La bonne façon d'obtenir le répertoire courant est d'utiliser une bibliothèque qui fournit support de dossier. Il y a plusieurs je recommande luafilesystem.
Une fois qu'il est installé, vous pouvez obtenir le répertoire courant par l'exécution de:
Cela fonctionne sur windows, linux et mac.
Méfiez-vous cependant que ces bibliothèques externes impliquent généralement, certains paquets binaires. Selon votre configuration, vous devrez le compiler avant de pouvoir l'utiliser.
EDIT:
Noter que lorsqu'un fichier est inclus via
require
, alors l'expression{...}[1]
retourne le chemin d'accès utilisé par lerequire
directive. Ce n'est pas exactement le chemin parce que:.lua
à la fin du fichier.package.path
Mais si tout ce que vous avez besoin est la "exiger-comme le chemin" du fichier (peut-être d'exiger des fichiers à côté de cela), alors vous pouvez l'obtenir en faisant cela, au tout début du fichier:
Si un fichier appelé
baz.lua
est nécessaire avecrequire 'foo.bar.baz'
, puisPATH
serafoo.bar
.OriginalL'auteur kikito
peut-être moches, hack comme
os.execute("cd")
.nope, os.exécuter'cd' imprime uniquement la sortie, tandis que les io.popen chose capture, et la met dans la variable current_dir
Merci, c'est juste ce dont j'avais besoin.
Fermer le "popen" - peut-être un magasin la popen dans un local et de proximité après la lecture. Sinon, c'est une fuite de handles.
Il ne "fuite" poignées temporairement jusqu'à ce qu'ils sont des ordures collectées. Essayez
print(io.popen("ls").__gc)
.OriginalL'auteur jpjacobs
Vous devriez être en mesure d'obtenir les actuellement en cours d'exécution lua chemin d'accès du fichier:
ou
et puis le répertoire courant avec une regex:
Edit: en fait ça ne marche que si vous êtes en cours d'exécution de votre lua avec le chemin complet.
par exemple: "lua.exe C:\test\test.lua" et PAS "lua.exe test.lua"
debug.getinfo(1).source
et modifier la regex pourstring.gsub(debug.getinfo(1).source, "^@(.+/)[^/]+$", "%1")
.OriginalL'auteur aryu
Je n'ai pas eu le temps de tester cela, mais avez-vous essayé os.la fonction getenv de lire les variables d'environnement windows?
Windows a une variable d'environnement pour le répertoire courant: %CD%
Edit: Testé sur Windows 7 et tout les autres variables d'environnement de travail (ie. USERNAME %% ou %PROGRAMFILES%) le CD var renvoie nil
J'ai été en mesure de passer à l' %CD% variable pour le script, en fonction de la façon dont vous exécuter vos scripts. I. E: C:\>lua5.1.exe test.lua %CD% (puis le chemin d'accès est disponible en arg[1])
%CD% n'est pas un processus de variable d'environnement, il est fourni par le shell, donc ça ne marchera pas
os.getenv("PWD")
semble fonctionner sur MacOriginalL'auteur Adam
Vous pouvez utiliser alien appeler à GetCurrentDirectory dans kernel32.dll, mais ce n'est probablement pas ce que vous cherchez.
OriginalL'auteur Stuart P. Bentley