2013-10-15 2 views
0

Я хочу взаимодействовать после поиска файла в приглашении Tcl. т.е.Tcl взаимодействует после поиска файла.tcl

] $ tclsh myCode.tcl

// выполнить мой код

% // Переход в режим Взаимодействовать в myCode.tcl

+0

См. [Этот вопрос] (http://stackoverflow.com/questions/19290982/tcl-expect-interact-command-echos-previous-output-from-spawned-rlwrap-process/19379047#19379047) - это дубликат. –

+0

@JohannesKuhn О чем вы говорите? Это было связано с взаимодействием с подчиненным процессом, тогда как это связано с взаимодействием с текущим интерпретатором. –

+0

Проблема такая же: «Как я могу выполнить некоторые вещи в интерпретации и дать пользователю интерактивную оболочку?». Тег [tag: expect] не помогает убедить меня в другом. ([Проблема XY] (http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem/66378#66378)) –

ответ

1

Самый простой способ сделать это состоит в использовании commandloop команда от TclX extension.

package require Tclx 

#... define things and run things... 

# Let the user issue commands 
commandloop 

Связанная страница wiki обсуждает, как это сделать, не используя TclX.

0

Боюсь, я слишком мало читаю в этом или слишком упрощаю его, но ... это не то, что вам нужно для команды interact?

Если вы хотите Tcl/Ожидать что-то делать, то выход управления обратно к пользователю, пожалуйста проверить команду в будут взаимодействовать ссылки мужчина страницы ниже:

http://www.tcl.tk/man/expect5.31/expect.1.html

+0

взаимодействует, выдает сообщение об ошибке: не может взаимодействовать с самонастраивающимся spawn_id для порожденного процесса – Ashwin

+0

Хм ... так что, полагаю, вы не создаете другого процесс и использование Expect, то? Если это так, команда взаимодействия будет бесполезной. Извините, я предположил, что вы использовали Expect с вашим Tcl. – James

0

Если вы хотели бы сделать он в чистом tcl без каких-либо внешних пакетов, простейшая реализация подсказки tclsh очень проста. Просто поместите это в конце myCode.tcl:

fileevent stdin readable { 
    puts [eval [gets stdin]] 
} 

vwait forever 

Вы можете даже реализовать это как отдельную программу, что источники ваших других TCL скриптов.

Конечно, приведенный выше примерный код настолько прост, что он даже не распечатывает приглашение или не обрабатывает такие вещи, как многострочные команды, но это хорошая отправная точка для изменения и настройки.