Chemin complet du script TCL actuel
Est-il une possibilité d'obtenir le chemin d'accès complet de la actuellement à l'exécution de script TCL?
En PHP, ce serait: __FILE__
source d'informationauteur dmorlock
Vous devez vous connecter pour publier un commentaire.
Vous voulez
$argv0
En fonction de ce que vous entendez par "actuellement en cours d'exécution script TCL", vous pouvez rechercher la
info script
ou peut-être mêmeinfo nameofexecutable
ou quelque chose de plus ésotérique.La bonne façon de récupérer le nom du fichier que l'instruction en cours réside dans l', est-ce (un vrai équivalent en PHP/C++
__FILE__
):Psuedocode (comment ça marche):
set thisFile <value>
: définit la variable thisFile àvalue
dict get <dict> file
: retourne la valeur de fichier à partir d'un dictinfo frame <#>
: retourne une dict avec des informations sur le cadre au niveau de la pile (#
), et0
sera de retour les plus récents frame de pileAVIS: Voir en fin de post pour plus d'informations sur les infos de cadre.
Dans ce cas, le
file
valeur renvoyée parinfo frame
est déjà normalisée, sifile normalize <path>
en a pas besoin.La différence entre
info script
etinfo frame
est principalement pour une utilisation avec Tcl Paquets. Siinfo script
a été utilisé dans un fichier Tcl qui vous a été fourni lors d'un package require (require package <name>
), puisinfo script
renvoie le chemin d'accès pour l'exécution de script Tcl et ne fournirait pas le nom réel du fichier Tcl qui contenait lainfo script
de commande; Toutefois, lainfo frame
exemple fourni ici serait de renvoyer correctement le nom de fichier du fichier qui contient la commande.Si vous voulez le nom du script en cours d'évaluation, puis:
Si vous voulez le nom du script (ou interprète) qui a initialement été invoquée, alors:
Si vous souhaitez que le nom de l'exécutable qui a été initialement invoquée, alors:
De mise à JOUR des informations sur:
info frame
Voici ce qu'un stacktrace ressemble à l'intérieur de Tcl. Le
frame_index
est la pour nous montrer ce queinfo frame $frame_index
ressemble pour les valeurs de0
par[ info frame ]
.Appel
info frame [ info frame ]
est fonctionnellement équivalent àinfo frame 0
mais à l'aide de0
est bien sûr plus rapide.Il y a seulement fait
1
à[ info frame ]
pile d'images, et0
se comporte comme[ info frame ]
. Dans cet exemple vous pouvez voir que0
et5
(qui est[ info frame ]
) sont les mêmes:Voir:
https://github.com/Xilinx/XilinxTclStore/blob/master/tclapp/xilinx/profiler/app.tcl#L273
Vous pouvez utiliser [fichier normaliser] pour obtenir le entièrement normalisée nom, trop.
secondes après que j'ai posté ma question ...
lindex $argv 0
est un bon point de départ 😉