Tcl/tk + c

Автор: Andrey_Zee Дата: 08.12.2008 16:29 Написал программку которая с ком-порта читает данные, теперь хочу часть этих данных выводить в форму написанную в tcl/tk.... вот правда не знаю как это сделать.... может у кого-нибудь примерчик есть или так кто нибудь расскажет про реализацию подобного взаимодействия....
Re: tcl/tk + c 08.12.2008 20:32kosmonavt Можно организовать канал для взаимодействия между скриптом и программкой. В скрипте надо создать обработчики событий при появлении данных в канале. Примерно так:

---
#!/bin/sh
# \
exec wish "$0"

# создаем метку, которая будет получать текст из переменной infVar
pack [label .inf -textvariable infVar]
pack [button .quit -text Quit -command exit]

# запускаем дочерний процесс, который будет "сливать инфу" скрипту
set pipeFD [open {| seq 100 | awk {{print;system("sleep 1";-);}}} r]

# привязываем onPipe к событию появления данных в канале
fileevent $pipeFD readable onPipe

# переводим канал в неблокирующий режим,
# чтобы не блокировать процесс интерпретатора и устанавливаем
# построчный режим буферизации
fconfigure $pipeFD -blocking 0 -buffering line

# чтение данных из канала
proc onPipe {} {
global pipeFD infVar
if {[gets $pipeFD line] >= 0} {
set infVar "line is $line"
} else {
if [catch {close $pipeFD} msg] {
tk_messageBox -message $msg -parent . -icon error
}
}
}
---
Учтите, что каналы в тикле могут быть двунаправленными
(open с флагом режима чтения/записи "r+";-).
Как вариант, можете запустить скрипт из вашей програмки,
но тогда вам нужно повесить обработчики событий на
stdin и/или stdout

ссылки теме
[www.tcl.tk]
[www.tcl.tk]

Удачи

PS

[community.livejournal.com]
Re: tcl/tk + c 09.12.2008 08:37Andrey_Zee спасибо за помощь....
Re: tcl/tk + c 17.06.2009 00:35riise Написал скрипт для просмотра SOP -ip tv с помощью Mplayer.:
.........
set sp [catch {exec ps -d | grep sp-sc-auth |& cat} input] ;
exec sleep 2 ;
if {$sp==0} {exec kill [lindex [exec ps -d | grep sp-sc-auth] 0]} ;
set i [lindex $selec [lsearch -exact $prog [$rc.d.a get]]]
exec /./sp-sc-auth sop://broker.sopcast.com:3912/$i 3908 8908 > /dev/null & ;
exec sleep 2 ;
exec mplayer -vf scale=320:240 -msglevel all=0 [localhost] &
..........
Вопрос : как можно посадить на кнопку обработку другого процесса ,к примеру, раузу для преера
и вообще возможно как-нибудь управлять им кроме конечно уничтожения.
Заранее благодарю
Re: tcl/tk + c 19.06.2009 18:11kosmonavt > возможно как-нибудь управлять им кроме конечно уничтожения.

Возможно: [wiki.linuxformat.ru]

PS

> exec sleep 2

man n after

> exec kill

В пакете tclx есть команды, которые позволяют гибче управлять процессами из tcl.
Re: tcl/tk + c 20.06.2009 22:01riise Спасибо я копаю в несколько другом направлении. В общем если кому надо, то вот что у меня получилось :
программа позволяет просматривать Sop-потоки при помощи Mplayer. sp-sc-auth файл находиться в корне. Возможно некоторые каналы требуют сортировки и тут далеко не все.
#!/bin/sh
## \export DISPLAY=:0
# restart \
exec wish "$0" "$@"

set PageTitle "SOP-Player"
set selec {6001 6002 6029 6106 8301 13249 18591 18190 10912 18132 18135 27350 31387 45965 6015 6021 6030 6097 6403 6404 6880 11936 15102 10103 21256}
set prog {ShangHai_GSports cctv-5 Star_Sports LaLida_Live BRSAT Stuttgart Sweet_Sex aatv.tk espn Asia mu Sports_ittv Rete_Sei Sports_Voll NationGeo Discov ShangHai Cbn East Shang HdtvBest }

set default Gsport
set rc [frame .mm]

pack $rc -side top -fill none

wm title . $PageTitle
wm resizable . 1 1
wm geometry . =+35+310
button $rc.c -text "Exit" -command {exi}
button $rc.b -text "Play" -command {chek}

labelframe $rc.d -text "Канал"
ttk::combobox $rc.d.a -state readonly -values $prog -textvariable default
pack $rc.d $rc.d.a -side left
pack $rc.b $rc.c -side left

proc chek {} {
global rc
global selec
global prog
set sp [catch {exec ps -d | grep sp-sc-auth |& cat } input] ;
if {$sp==0} {exec kill [exec /sbin/pidof sp-sc-auth]} ;
set i [lindex $selec [lsearch -exact $prog [$rc.d.a get]]]
exec /./sp-sc-auth sop://broker.sopcast.com:3912/$i 3908 8908 >/dev/null & ;
exec sleep 5 ;
exec mplayer -vf scale=320:240 -geometry 40:50 -msglevel all=0 [localhost] & ;
}
proc exi {} {exec kill [exec /sbin/pidof sp-sc-auth] & ; exit}
bind all <Control-c> {destroy .}
RSS-материал