我试图重定向我的stdout
和stderr
输出到一个文本小部件,我试图Memchan
做到这一点,它做了not work。tcl/tk - 我们可以将tcl stdout重定向到套接字吗?
我们正在看的下一个选项是使用套接字。我们可以将tcl
stdout
重定向到套接字吗?如果是的话,你能提供一个示例代码来证明这一点吗?
我试图重定向我的stdout
和stderr
输出到一个文本小部件,我试图Memchan
做到这一点,它做了not work。tcl/tk - 我们可以将tcl stdout重定向到套接字吗?
我们正在看的下一个选项是使用套接字。我们可以将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...
这将启动一个Tcl子对每个传入套接字连接执行realScript.tcl
,并安排标准输入(<@
)标准输出(>@
)和标准错误(2>@
)被重定向到插座。它还在后台运行子进程(最终&
),以便它不阻止传入连接。 (在运行子进程之前,您可能需要检查$host
和$port
的可接受性。)
甚至更好,在子进程中,Tcl仍然会自动检测到它正在处理套接字; fconfigure
命令将能够看到套接字配置(当然,即使它不能更改与其通话的端口)。
你是什么意思的“重定向我的标准输出”?你的意思是,当你做一个puts foo
你想要去插座?如果是这样,只需使用您自己的写入套接字的默认puts
命令替换即可。你可以通过将puts
重命名为其他内容,然后创建名为puts
的自己的proc。然后,你的proc将使用renamed命令来执行实际的I/O,但是你可以插入socket作为参数。