Вопрос кажется неполным, поскольку вы не указали, что именно означает "интерактивный" для вашего инструмента.
Как он поддерживает интерактивные запросы?Он вызывает gets
в виде бесконечного цикла и обрабатывает каждую строку во время чтения?Если это так, решение вашей проблемы простое: оболочка Tcl на самом деле не заботится о том, подключен ли ее стандартный вход к интерактивному терминалу или нет.Поэтому просто создайте свой инструмент в коде обработки запросов CGI, запишите запрос пользователя в поток stdin этого процесса, очистите его , а затем прочитайте весь текст, написанный этим процессом, в его потоки stdout и stderr.Затем отправьте их обратно в браузер.Как именно порождать процесс и взаимодействовать с ним через его стандартные потоки, во многом зависит от вашего CGI-кода.
Если вам не пришла в голову идея, попробуйте записать свой запрос в файл, а затем выполните что-то вроде
$ tclsh /path/to/your/tool/script.tcl </path/to/the/query.file
и у вас должен быть инструмент для ответа обычным способом.
Если взаимодействие осуществляется другим способом в вашем инструменте, то вам, вероятно, придется разделить его на «ядро».«и» передние части, так что ядро просто читает запросы и выводит результаты, а передняя часть выполняет взаимодействие.Затем подключите это ядро к своему коду обработки CGI, как описано выше.