tcl / tk - 我们可以将tcl标准输出重定向到套接字吗?

时间:2011-05-12 05:32:45

标签: sockets redirect tcl

我正在尝试将我的stdoutstderr输出重定向到文本小部件,我尝试Memchan执行此操作,并且not work

我们正在研究的下一个选项是使用套接字。我们可以将tcl stdout重定向到套接字吗?如果是,您能提供示例代码来证明吗?

2 个答案:

答案 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,但您可以插入套接字作为参数。