# #tcl #quartus
Вопрос:
Мне нужен путь к сценарию, выполняемому интерпретатором TCL. Я использовал «информационный скрипт», но он возвращает пустую строку! Я также пытался использовать команды оболочки, но они вообще не работают из программы интерпретатора tcl по причинам, которые я пока не понимаю. Я пытаюсь сделать это в «Системной консоли» , найденной в стандарте Intel Quartus Prime.
Какая альтернатива существует? Я использую графический интерфейс и выбираю сценарий в окне, которое появляется после выбора команды «Выполнить сценарий».
Комментарии:
1.
info script
Команда возвращает пустую строку, если в стеке нетsource
активного (или эквивалента C API).2. @DonalFellows правильно ли использовать
info script
этот способ внутри исполняемого файла starkit ? Я использую его в основном для получения корневого пути внутренней VFS, чтобы я мог копировать файлы, хранящиеся внутри, в «внешнюю» реальную файловую систему.3. @Losko Это правильно, где бы то ни было; одна из особенностей всей абстракции VFS заключается в том, что при виртуализации все работает так же близко, как и в реальной файловой системе. Это только для некоторых вещей (например, файлов, которые передаются другим программам или необработанным вызовам базовой ОС), которые вы не можете сделать.
Ответ №1:
Вы можете получить полезную информацию только info script
во время активного запуска этого файла Tcl, а не при вызове процедур, которые он определяет позже. Довольно часто это помещается в ваш исходный файл:
variable thisFile [file normalize [info script]]
# Normalizing converts to an absolute path and sorts out all the symbolic links
Это очень хорошо работает, когда файл также определяет пространство имен, что является обычной практикой для любого неопределенного библиотечного кода.
Но если у вас этого нет, что вы все равно можете сделать? Ну… если у вас 8.6 (или более поздняя версия), то у вас есть выбор.
% parray tcl_platform
tcl_platform(byteOrder) = littleEndian
tcl_platform(engine) = Tcl
tcl_platform(machine) = x86_64
tcl_platform(os) = Darwin
tcl_platform(osVersion) = 20.4.0
tcl_platform(pathSeparator) = :
tcl_platform(platform) = unix
tcl_platform(pointerSize) = 8
tcl_platform(threaded) = 1
tcl_platform(wordSize) = 8
% dict get [tcl::unsupported::getbytecode proc parray] sourcefile
/opt/local/lib/tcl8.6/parray.tcl
Вы также можете выбрать информацию из результата tcl::unsupported::disassemble
, если вам действительно нравится обработка строк, но getbytecode
это проще. Этой информации нет в Tcl 8.5 и более ранних версиях (и нет getbytecode
).
Комментарии:
1. Сейчас я тоже займусь этим вопросом. Я ошибочно предполагал, что $::argv0 будет лекарством от всех моих недугов.
Ответ №2:
Тебе нужно
pwd
Возвращает абсолютный путь к текущему рабочему каталогу.
Источник: https://www.tcl.tk/man/tcl/TclCmd/pwd.htm
Так что вам, вероятно, следует это сделать:
set current_path [file nativename [pwd]]
Пока
Комментарии:
1. Это, похоже, не работает, так как это просто дает мне путь к переводчику. Я довольно удивлен, увидев, что системная консоль Intel Quartus Prime делает это неправильно.