Получение пути к процессу в TCL, который вызывается из другого скрипта - PullRequest
3 голосов
/ 04 марта 2011

Я новичок в программировании TCL

У меня есть сценарий tcl под названием test1.tcl и test2.tcl отдельно в двух разных

каталогах F: \ TCLPrograms \ SamplePrograms \ test1.tcl и F: \ TCLPrograms \ test2.tcl

Я хочу знать полный путь к test2.tcl, который является процедурой

, если я дам информацию [script] внутри proc disp {} еговозвращая путь, откуда он вызывается

т.е. F: \ TCLPrograms \ SamplePrograms \ test1.tcl

любезно кто-то подскажет мне получить путь к proc

test1.tcl:

puts "Processing test1..."
source "F:\\TCLPrograms\\test2.tcl"
set rc [disp]
puts "Executed...."

test2.tcl:

proc disp { } {
puts "Successfully executed test2.tcl"
set path [info script]
puts "Script is invoked from the path: $path"
}

Заранее спасибо

1 Ответ

6 голосов
/ 04 марта 2011

Результат info script зависит от текущего самого внутреннего source, и процедуры не поддерживают эту информацию.(Ну, он поддерживается в отладочной информации для 8.6 и некоторых сборках 8.5 из ActiveState, но доступ к нему действительно неудобен.)

Самый простой способ - использовать переменную для хранения имени файла, например, так::

variable dispScriptFile [file normalize [info script]]
proc disp {} {
    variable dispScriptFile
    puts "Successfully executed test2.tcl"
    set path [file dirname $dispScriptFile]
    puts "Script is invoked from the path: $path"
}

Обратите внимание, что мы используем нормализованное имя файла, поэтому оно остается действительным, даже если вы используете относительный путь, а затем cd для некоторого другого каталога.(Я также рекомендую поместить все содержимое test2.tcl в его собственное пространство имен; это облегчает разделение.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...