虽然我对 Tcl 很熟悉,但这是一个初学者的问题。我想从管道读取和写入。我想要一个纯 Tcl 的解决方案,而不是使用像 Expect 这样的库。我从 tcl wiki 复制了一个示例,但无法运行。
我的代码是:
cd /tmp
catch {
console show
update
}
proc go {} {
puts "executing go"
set pipe [open "|cat" RDWR]
fconfigure $pipe -buffering line -blocking 0
fileevent $pipe readable [list piperead $pipe]
if {![eof $pipe]} {
puts $pipe "hello cat program!"
flush $pipe
set got [gets $pipe]
puts "result: $got"
}
}
go
输出是executing go\n result:
,但是我希望从管道中读取一个值会返回我发送给 cat 程序的行。
我的错误是什么?
--
编辑:
我按照 potrzebie 的回答,得到了一个小例子。这足以让我前进。测试我的设置的快速解决方法是以下代码(不是真正的解决方案,而是目前的快速修复)。
cd /home/stephan/tmp
catch {
console show
update
}
puts "starting pipe"
set pipe [open "|cat" RDWR]
fconfigure $pipe -buffering line -blocking 0
after 10
puts $pipe "hello cat!"
flush $pipe
set got [gets $pipe]
puts "got from pipe: $got"