Встроенные команды ТCL


interp

        Команда создает и управляет Тс1-интерпретаторами.

         Синтаксис
        interp option?arg arg...?

        Описание

        Эта команда позволяет создавать один или несколько новых Tcl-интерпретаторов, которые сосуществуют в одном приложении с создавшим их интерпретатором. Создавший интерпретатор называется мастер-интерпретатором, а созданные интерпретаторы называются подчиненными (slave) интерпретаторами. Мастер-интерпретатор может создавать произвольное число подчиненных интерпретаторов, а каждый из подчиненных может в свою очередь создавать подчиненные интерпретаторы, для которых он сам является мастер-интерпретатором. В результате в приложении может создаваться иерархия интерпретаторов.

        Каждый интерпретатор независим от остальных. Он имеет собственное пространство имен для команд, процедур и глобальных переменных. Мастер-интерпретатор может создавать связи между подчиненными интерпретаторами и собой, используя механизм алиасов. Алиас — это команда в подчиненном интерпретаторе, которая, при ее вызове, вызывает другую команду в мастер-интерпретаторе или в другом подчиненном интерпретаторе. Кроме механизма алиасов, связь между интерпретаторами поддерживается только через переменные окружения. Массив обычно является общим для всех интерпретаторов в приложении. Необходимо заметить, что идентификаторы каналов (например, идентификатор, возвращаемый командой open) больше не разделяются между интерпретаторами, как это было в предыдущих версиях Tcl. Чтобы обеспечить совместный доступ к каналам, необходимо использовать явные команды для передачи идентификаторов каналов из интерпретатора в интерпретатор.

        Команда interp позволяет также создавать надежные интерпретаторы. Надежный интерпретатор — это интерпретатор с существенно урезанной функциональностью, поэтому он может исполнять ненадежные скрипты без риска нарушить работу вызывающего их приложения. Например, из безопасных интерпретаторов недоступны команды создания каналов и подпроцессов. Опасная функциональность не удалена из безопасных интерпретаторов, но скрыта таким образом, что только надежные интерпретаторы могут получить к ней доступ. Механизм алиасов может быть использован для безопасного взаимодействия между подчиненным интерпретатором и его мастер-интерпретатором.

        Полное имя интерпретатора представляет собой список, содержащий имена его предков в иерархии интерпретаторов и заканчивающийся именем интерпретатора в его непосредственном предке. Имена интерпретаторов в списке — это их относительные имена в их непосредственных мастер-интерпретаторах. Например, если а есть подчиненный интерпретатор текущего интерпретатора и, в свою очередь, имеет подчиненный интерпретатор a1, а тот, в свою очередь, имеет подчиненный интерпретатор a11, то полное имя a11 в а есть список {a1 a11}.

        В качестве аргумента команды interp используется полное имя интерпретатора. Интерпретатор, в котором исполняется команда, всегда обозначается как {} (пустая строка). Обратите внимание, что в подчиненном интерпретаторе невозможно сослаться на мастер-интерпретатор кроме как через алиасы. Также нет никакого имени, под которому можно было бы сослаться на мастер-интерпретатор, первым созданный в приложении. Оба ограничения вызваны соображениями безопасности.

        Команда interp используется для создания, удаления и выполнения команд в подчиненном интерпретаторе, а также для разделения или передачи каналов между интерпретаторами. Она может иметь одну из перечисленных ниже форм в зависимости от значения аргумента option.

interp alias srcPath srcCmd
        Возвращает список, состоящий из исходной команды и аргументов, связанных с алиасом srcCmd в интерпретаторе srcPath (возвращаются значения,.использовавшиеся при создании алиаса, так как имя команды могло быть изменено с помощью команды rename).

interp alias srcPath srcCmd {}
        Удаляет алиас srcCmd в подчиненном интерпретаторе srcPath. Имя srcCmd — это имя, под которым алиас был создан. Если созданная команда была переименована, то будет удалена переименованная команда.

interp alias srcPath srcCmd targetPath targetCmd?arg arg...?
        Эта команда создает алиас между двумя подчиненными интерпретаторами (для создания алиаса между подчиненным интерпретатором и мастер-интерпретатором используется команда slave alias). Оба интерпретатора srcPath и targetPath должны быть в иерархии интерпретаторов ниже того интерпретатора, в котором выполняется команда. Аргументы srcPath и srcCmd задают интерпретатор, в котором будет создан алиас и его имя. Аргумент srcPath должен быть Tcl-списком, задающим имя существующего интерпретатора. Например, «а b» определяет интерпретатор b, который является подчиненным интерпретатором интерпретатора а, который в свою очередь является подчиненным интерпретатором текущего интерпретатора. Пустой список соответствует текущему интерпретатору (в котором исполняется команда). Аргумент srcCmd определяет имя новой команды-алиаса, которая будет создана в интерпретаторе srcPath. Аргументы targetPath и targetCmd определяют целевой интерпретатор и команду, а аргументы arg, если они есть, определяют дополнительные аргументы для команды targetCmd, которые будут вставлены перед аргументами, заданным при вызове srcCmd. Команда targetCmd может как существовать, так и не существовать в момент создания алиаса. В последнем случае она не создается командой interp alias.

        Алиас позволяет использовать команду targetCmd в интерпретаторе targetPath каждый раз, когда вызывается команда-алиас srcCmd в интерпретаторе srcPath.

interp aliases?path?
        Эта команда возвращает список имен всех команд-алиасов, определенных в интерпретаторе path.

interp create?-safe??--??path?
        Создает подчиненный интерпретатор с именем path и новую команду для работы с этим интерпретатором, называемую также подчиненной (slave) командой. Имя подчиненной команды совпадает с последним элементом списка path. Новый подчиненный интерпретатор и подчиненная команда создаются в интерпретаторе, имя которого состоит из всех элементов списка path, кроме последнего. Если аргумент path отсутствует, Tcl создает уникальное имя в форме interpx, где х — целое число, и использует его для подчиненного интерпретатора и подчиненной команды. Если в команде указана опция -safe или если мастер-интерпретатор сам является безопасным интерпретатором, новый подчиненный интерпретатор будет безопасным, то есть с ограниченной функциональностью. В противном случае новый интерпретатор будет включать полный набор встроенных Tcl-команд и переменных. Аргумент — используется для того, чтобы обозначить конец опций. Следующий аргумент будет использоваться как имя интерпретатора, даже если он равен -safe.

interp delete?path...?
        Удаляет ноль или больше интерпретаторов с именем path. Для каждого удаляемого интерпретатора удаляются также его подчиненные интерпретаторы. Если для одного из аргументов path интерпретатора с таким именем не существует, команда генерирует ошибку.

interp eval path arg?arg...?
        Команда объединяет все аргументы так же, как команда concat, а затем исполняет сформированный скрипт в подчиненном интерпретаторе, заданном аргументом path. Результат выполнения (включая информацию об ошибках в переменных errorInfo и errorCode, если произошла ошибка) возвращается в вызывающий интерпретатор.

interp exists path
        Возвращает 1, если подчиненный интерпретатор с именем path существует в его мастер-интерпретаторе. В противном случае возвращает 0. Если аргумент path представляет относительное имя, то он ищется в том интерпретаторе, в котором выполняется команда.

interp expose path hiddenName?exposedCmdName?
        Разрешает использование в интерпретаторе path скрытой команды hiddenName под новым именем exposedCmdName (в настоящее время поддерживаются только имена в глобальном пространстве имен, не содержащие «::»). Если обычная (не скрытая) команда exposedCmdName уже существует, генерируется сообщение об ошибке.

interp hidepath exposedCmdName?hiddenCmdName?
        Запрещает использование в интерпретаторе path обычной команды exposedCmdName и переименовывает ее в скрытую команду hiddenCmdName (или в скрытую команду под старым именем, если новое не было задано). Если скрытая команда с заданным именем уже существует, команда возвращает ошибку. В настоящее время exposedCmdName и hiddenCmdName не могут содержать «::». Команды, которые должны быть скрыты с помощью interp hide, ищутся только в глобальном пространстве имен, даже если текущее пространство имен не глобальное.

interp hidden path
        Возвращает список скрытых команд интерпретатора path.

interp invokehidden path?-global? hiddenCmdName?arg...?
        Вызывает в интерпретаторе path скрытую команду hiddenCmdName с перечисленными аргументами. Никаких подстановок или вычислений в аргументах не производится. Если указана опция -global, скрытая команда выполняется на глобальном уровне в целевом интерпретаторе. В противном случае она выполняется в текущем контексте и может использовать значения локальных переменных и переменных из вышестоящих стеков.

interp issafe?path?
        Возвращает 1, если интерпретатор path безопасный, и 0 в противном случае.

interp marktrusted path
        Отмечает интерпретатор path как надежный. Не раскрывает скрытые команды. Команда interp marktrusted может выполняться только из надежного интерпретатора. Если интерпретатор path уже надежный, команда не оказывает никакого воздействия.

interp share srcPath channelId destPath
        Позволяет разделить канал ввода-вывода channelId между интерпретаторами srcPath и destPath. Оба интерпретатора после этого будут иметь одинаковые права на канал. Каналы ввода-вывода, доступные в интерпретаторе, автоматически закрываются, когда удаляется Интерпретатор.

interp slaves?path?
        Возвращает список подчиненных интерпретаторов для интерпретатора path. Если аргумент path отсутствует, возвращает список подчиненных интерпретаторов для интерпретатора, в котором выполняется команда.

interp target path alias
        Возвращает список, описывающий целевой интерпретатор (интерпретатор, в котором выполняется реальная команда при вызове команды-алиаса) для алиаса alias. Алиас задается именем интерпретатора path и команды-алиаса alias, как в команде interp alias выше. Имя целевого интерпретатора возвращается как имя интерпретатора относительно имени интерпретатора, в котором выполняется команда. Если это текущий интерпретатор, то возвращается пустой список. Если этот интерпретатор не является потомком интерпретатора, в котором выполняется команда, генерируется ошибка. Реальная команда не обязана быть определена в момент выполнения данной команды.

interp transfer srcPath channelId destPath
        Делает канал ввода-вывода channelId доступным в интерпретаторе destPath и недоступным в интерпретаторе srcPath.
Hosted by uCoz