Как войти в окно xterm из сценария tcl

Я открываю окно xterm из моего tcl exec xterm -geometry 78x36+0+0 -fn "-adobe-courier-medium-r-*-*-*-120-*-*-*-*-iso8859-1" -sl 10000 -sb -bg white -bd white -into..... Я выполняю другие команды на этом терминале эмуляции. Теперь я хочу записать вывод этих команд в файл из того же сценария tcl. Может ли кто-нибудь иметь представление о том, как это сделать....?

Заранее спасибо мурали кришна


person mkreddy    schedule 04.03.2014    source источник


Ответы (1)


Захват извне — с точки зрения скрипта, выполняющего exec xterm … -into … — чрезвычайно сложен, так как нет никаких событий, которые вы получаете, когда что-то рисует во вспомогательном окне (за исключением одного случая, когда вы на самом деле не хотите этого), и вы закончите просто увидел множество растровых изображений того, что произошло в любом случае; большой и очень малоинформативный. Вам нужно использовать другой подход; вам нужно захватить изнутри, чтобы регистрировать то, что пользователь видит на терминале. К счастью, на самом деле это не так уж сложно сделать.

Чтобы вести полный журнал того, что происходит внутри терминала (где сама терминальная программа не предлагает эту функцию), лучше всего запустить небольшой скрипт Expect внутри терминала.

package require Expect

log_file /tmp/somefile.log
spawn $env(SHELL)
interact
exit

Запустите это внутри терминала (в xterm есть возможность сделать это), и он будет записывать все, что происходит внутри. Он записывается во временный файл /tmp/somefile.log, но при желании вы можете изменить используемое имя. Вероятно, хорошей идеей будет передать файл журнала с помощью аргумента:

package require Expect

if {$argc < 1} {
    error "not enough arguments"
}
# Unlike C, Tcl doesn't include interpreter name or script name in argv
log_file [lindex $argv 0]
spawn $env(SHELL)
interact
exit
person Donal Fellows    schedule 05.03.2014