2013-11-08 2 views
1

Я делаю этот GUI-TCL-скрипт с ActiveTCL & Ожидаем.Нужна помощь с оберткой Tclapp

Но по какой-то причине Expect не работает с telnet, который поставляется с Windows 8 64bit, поэтому я решил использовать собственный скрипт telnet tcl. Он отлично работает, но теперь мне нужно обернуть мой скрипт сценарием telnet и некоторыми изображениями логотипов в один .exe для запуска без дополнительных файлов в каталоге, но я не могу на всю жизнь заставить его работать.

Я нажимаю добавить файлы в оболочку tclapp, но он говорит, что файл не найден в скрипте, когда он пытается вызвать сценарий telnet.

+0

Система телнет на Windows, помечается как (специальный флаг файловой системы) система бинарного и что делает его невозможно прикрепить блок отладки to, как работает Expect-on-Windows под капотом. Просто так, как вы знаете. –

+0

Вы пытаетесь запустить свой telnet-скрипт как свой собственный завернутый исполняемый файл? –

+0

Да Это план – Nikaido

ответ

0

Когда вы завершаете 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 копию, как только вы закончите его использования.

Соответствующий справочный материал:

+0

Я думаю, что мы пропустили друг друга, мой telnet - это сценарий, а не exe. Я мог бы попытаться найти telnet winxp для использования с ним, так как он хорошо работает с активным TCL, но я не могу заставить его работать с w8 64-битным telnet-клиентом – Nikaido