2011-05-12 37 views

回答

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... 

这将启动一个Tcl子对每个传入套接字连接执行realScript.tcl,并安排标准输入(<@)标准输出(>@)和标准错误(2>@)被重定向到插座。它还在后台运行子进程(最终&),以便它不阻止传入连接。 (在运行子进程之前,您可能需要检查$host$port的可接受性。)

甚至更​​好,在子进程中,Tcl仍然会自动检测到它正在处理套接字; fconfigure命令将能够看到套接字配置(当然,即使它不能更改与其通话的端口)。

0

你是什么意思的“重定向我的标准输出”?你的意思是,当你做一个puts foo你想要去插座?如果是这样,只需使用您自己的写入套接字的默认puts命令替换即可。你可以通过将puts重命名为其他内容,然后创建名为puts的自己的proc。然后,你的proc将使用renamed命令来执行实际的I/O,但是你可以插入socket作为参数。

相关问题