tcllib websocket:如何将收到的消息打印到文本小部件
tcllib websocket: How to print received messages to a text widget
这是我的代码的重要部分:
set message_initialization_result ""
proc logMessage {msg} {
upvar outputtext outputtext
if { [string length $outputtext] > 0 } {
if { [string length $msg] > 0 } {
$outputtext insert end $msg
$outputtext insert end "\n\n"
}
}
}
proc handler { sock type msg } {
upvar outputtext outputtext
upvar message_initialization_result message_initialization_result
if {[catch {
switch -glob -nocase -- $type {
co* {
logMessage "Connected on $sock"
}
te* {
logMessage "Received:\n$msg"
}
cl* -
dis* {
logMessage "Disconnected"
}
}
}]} {
set message_initialization_result "$message_initialization_result handler"
}
}
set sock [::websocket::open ws://127.0.0.1:10010 handler]
...
logMessage $message_initialization_result
outputtext
是一个包含文本小部件的变量。
如何让处理程序将收到的消息打印到该文本小部件?
我如何检查这个处理程序是否被调用了?我尝试引发错误,但似乎它们都被 websocket 库中的 catch
捕获。
我正在为后代收集一些积分...
- 对于快速调试,将命令
puts [info level 0]
添加到您要跟踪的那些过程的开头。通过这种方式,您可以在每次调用过程时看到它收到的参数。
- 如果您在基于 Tk 的脚本中没有控制台(例如 Windows),因此无法看到
puts
的输出,请尝试打开 Tk 控制台console show
.
- 如果无法获得上述输出,请尝试将输出发送到文件。如果可以使用
fileutil
,命令 ::fileutil::appendToFile log.txt $msg
非常适合轻型日志记录。查看命令的选项。
- 没有
fileutil
?尝试 set f [open log.txt a] ; puts $f $msg ; close $f
。每次打开和关闭文件都会刷新它,这意味着您不需要那么多的侵入式注入和同步。
文档:
close,
console,
fileutil (package),
info,
open,
puts,
set
这是我的代码的重要部分:
set message_initialization_result ""
proc logMessage {msg} {
upvar outputtext outputtext
if { [string length $outputtext] > 0 } {
if { [string length $msg] > 0 } {
$outputtext insert end $msg
$outputtext insert end "\n\n"
}
}
}
proc handler { sock type msg } {
upvar outputtext outputtext
upvar message_initialization_result message_initialization_result
if {[catch {
switch -glob -nocase -- $type {
co* {
logMessage "Connected on $sock"
}
te* {
logMessage "Received:\n$msg"
}
cl* -
dis* {
logMessage "Disconnected"
}
}
}]} {
set message_initialization_result "$message_initialization_result handler"
}
}
set sock [::websocket::open ws://127.0.0.1:10010 handler]
...
logMessage $message_initialization_result
outputtext
是一个包含文本小部件的变量。
如何让处理程序将收到的消息打印到该文本小部件?
我如何检查这个处理程序是否被调用了?我尝试引发错误,但似乎它们都被 websocket 库中的 catch
捕获。
我正在为后代收集一些积分...
- 对于快速调试,将命令
puts [info level 0]
添加到您要跟踪的那些过程的开头。通过这种方式,您可以在每次调用过程时看到它收到的参数。 - 如果您在基于 Tk 的脚本中没有控制台(例如 Windows),因此无法看到
puts
的输出,请尝试打开 Tk 控制台console show
. - 如果无法获得上述输出,请尝试将输出发送到文件。如果可以使用
fileutil
,命令::fileutil::appendToFile log.txt $msg
非常适合轻型日志记录。查看命令的选项。 - 没有
fileutil
?尝试set f [open log.txt a] ; puts $f $msg ; close $f
。每次打开和关闭文件都会刷新它,这意味着您不需要那么多的侵入式注入和同步。
文档: close, console, fileutil (package), info, open, puts, set