Когда вы завершаете Tcl-код в однофайльный исполняемый файл, все идет внутрь. Скрипты, библиотеки, любые изображения (при условии, что вы создаете графический интерфейс), много. Tcl прозрачно извлекает вещи и притворяется, что у вас настоящая файловая система. Тем не менее, при выполнении программы (будь то с помощью exec
, open |…
или spawn
), то ОС должны быть вовлечены как вы создаете подпроцесс - ОС является всегда участвует в том, что, поскольку процесс управления является одним из основных вещей, что ядро ОС - и для его выполнения должен быть реальный исполняемый файл. Если вы упаковали свою замену telnet как свой собственный исполняемый файл одного файла и сохранили его в VFS родительского процесса, вы должны сделать этот подчиненный исполняемый процесс реальным.
Скопируйте исполняемый файл telnet в другое место (например, во временный каталог, который, как мне кажется, должен быть описан в $::env(TEMP)
) и выполните это.
set realTelnetExe [file join $::env(TEMP) mytelnet.exe]
file copy .../the/stored/copy/mytelnet.exe $realTelnetExe
spawn $realTelnetExe
# ...
Вы, вероятно, хотите file delete
копию, как только вы закончите его использования.
Соответствующий справочный материал:
Система телнет на Windows, помечается как (специальный флаг файловой системы) система бинарного и что делает его невозможно прикрепить блок отладки to, как работает Expect-on-Windows под капотом. Просто так, как вы знаете. –
Вы пытаетесь запустить свой telnet-скрипт как свой собственный завернутый исполняемый файл? –
Да Это план – Nikaido