Sockets tcl/tk-我们可以将tcl标准重定向到套接字吗?
我试图将我的Sockets tcl/tk-我们可以将tcl标准重定向到套接字吗?,sockets,redirect,tcl,Sockets,Redirect,Tcl,我试图将我的stdout和stderr输出重定向到一个文本小部件,我试图Memchan这样做,结果它成功了 我们正在研究的下一个选项是使用套接字。我们可以将tclstdout重定向到套接字吗?如果是,您能提供一个示例代码来演示吗?您能在子流程中运行吗?如果您能够: socket -server accept 12345 ;# pick your own port number... proc accept {channel host port} { exec [info nameof
stdout
和stderr
输出重定向到一个文本小部件,我试图Memchan
这样做,结果它成功了
我们正在研究的下一个选项是使用套接字。我们可以将
tcl
stdout
重定向到套接字吗?如果是,您能提供一个示例代码来演示吗?您能在子流程中运行吗?如果您能够:
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...
socket-服务器接受12345;#选择您自己的端口号。。。
proc accept{通道主机端口}{
exec[info nameofexecutable]realScript.tcl\
@$channel 2>@$channel&
}
永远等待运行事件循环以服务套接字。。。
这将启动一个Tcl子进程,为每个传入套接字连接执行realScript.Tcl
,并安排stdin(@
)和stderr(2>@
)重定向到套接字。它还在后台运行子进程(final&
),这样就不会阻止传入连接。(在运行子流程之前,您可能需要检查$host
和$port
的可接受性。)
更妙的是,在子流程中,Tcl仍然会自动检测到它正在处理套接字;
fconfigure
命令将能够看到套接字配置(当然,即使它无法更改与之通信的端口)。您所说的“重定向我的stdout”到底是什么意思?你的意思是,当你做一个放foo
的时候,你想把它放到插座上吗?如果是这样,只需将默认的put
命令替换为您自己的写入套接字的命令即可。您可以通过将put
重命名为其他名称,然后创建自己的名为put
的进程来实现这一点。然后,您的proc将使用重命名的命令来执行实际的I/O,但是您可以插入套接字作为参数