我正在尝试将我的stdout
和stderr
输出重定向到文本小部件,我尝试Memchan
执行此操作,并且not work。
我们正在研究的下一个选项是使用套接字。我们可以将tcl
stdout
重定向到套接字吗?如果是,您能提供示例代码来证明吗?
答案 0 :(得分:2)
你可以在子进程中运行吗?如果可以的话,这很简单:
socket -server accept 12345 ;# pick your own port number...
proc accept {channel host port} {
exec [info nameofexecutable] realScript.tcl \
<@$channel >@$channel 2>@$channel &
}
vwait forever ;# run the event loop to serve sockets...
这将为每个传入的套接字连接启动一个执行realScript.tcl
的Tcl子进程,并安排stdin(<@
)stdout(>@
)和stderr(2>@
)为重定向到套接字。它还在后台运行子进程(final &
),以便它不会阻止传入连接。 (在运行子流程之前,您可能需要检查$host
和$port
是否可接受。)
甚至更好的是,在子进程中Tcl仍会自动检测它正在处理套接字; fconfigure
命令将能够看到套接字配置(当然,即使它无法更改与之通信的端口)。
答案 1 :(得分:0)
“重定向我的标准输出”究竟是什么意思?你的意思是,当你做puts foo
时你想要去插座吗?如果是这样,只需用您自己的命令替换默认的puts
命令即可写入套接字。您可以通过将puts
重命名为其他内容,然后创建自己的名为puts
的proc。然后,您的proc将使用重命名的命令来执行实际的I / O,但您可以插入套接字作为参数。