在 Linux 上,我使用“mkfifo pip”创建了一个管道文件。在一个终端上,我发出“tail -f pip”,在另一个终端上发出“ls > pip”。我可以看到从第二个终端到第一个终端的信息流。
我创建了一个 TCL 脚本来读取流入 pip 的信息。
fconfigure stdout -buffering none
set fd [open "pip"]
fconfigure $fd -blocking 0 -buffering line
fileevent $fd readable [list Treading $fd]
proc Treading {desc} {
gets $desc line
puts stdout "Got line - $line"
}
while {1} {
puts "waiting..."
after 2000
}
我运行程序并从另一个终端发出“cat > pip”,在输出中我没有看到任何从 Treading 过程调用的“Got line”打印。
$tclsh sockpip.tcl
waiting...
waiting...
waiting...
waiting...
waiting...
waiting...
如果我遗漏了什么,有人可以帮我澄清吗?我想要事件驱动的编程工作。
提前致谢。 紫外线。
要触发
readable
事件,需要使用after
的非阻塞形式,请参见https://www.tcl-lang.org/man/tcl8.6/TclCmd/after.htm# M6并且您需要启动Tcl事件循环。而不是:
while {1} {
puts "waiting..."
after 2000
}
尝试:
proc waiting {} {
puts "waiting..."
after 2000 waiting
}
waiting
vwait forever