Можете ли вы запустить в подпроцесс? Это легко, если вы можете:
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
для каждого входящего соединения сокета, и организует перенаправление stdin (<@
) stdout (>@
) и stderr (2>@
) в сокет. Он также запускает подпроцесс в фоновом режиме (окончательный &
), чтобы не блокировать входящие соединения. (Возможно, вы захотите проверить $host
и $port
на приемлемость перед запуском подпроцесса.)
Что еще лучше, в подпроцессе Tcl все равно автоматически обнаружит, что имеет дело с сокетами; команда fconfigure
сможет увидеть конфигурацию сокета (даже если она, конечно, не может изменить порт, к которому она обращается).