Я перекрестно разместил этот вопрос на comp.lang.tcl.
Я занимаюсь разработкой приложения Tcl/Tk
(назовите его rs
) и хочу перенаправить stdout
и stderr
натекстовое поле в моем Tcl/Tk
приложении.Я использую Memchan
для достижения этой цели (я статически связал Memchan
в своем приложении).Но я не могу переименовать канал fifo
, который я создал, как stderr
.(То же самое верно и для stdout
)
Например, в следующем фрагменте я закрываю stderr
, а затем открываю fifo
как stderr
, но канал fifo остается названным как fifo0
не как stderr
.
$ rs
rs> package require Memchan
2.3
rs> chan names
stdin stdout stderr
rs> close stderr
rs> chan names
stdin stdout
rs> set stderr [fifo]
fifo0
rs> chan names
fifo0 stdin stdout
Я ожидал stderr
вместо fifo0
, когда набрал последнюю из команд chan names
.
Но когда я использую tclsh8.5
вышеуказанная последовательность дает желаемый эффект, т.е. fifo
переименовывается в stderr
$ tclsh8.5
% package req Memchan
2.3
% chan names
stdin stdout stderr
% close stderr
% chan names
stdin stdout
% set stderr [fifo]
fifo0
% chan names
stderr stdin stdout
Примечание: нет fifo0
, но мы получаем желаемую stderr
.
Можеткто-то указывает, как воспроизвести поведение в tclsh8.5
в моем приложении Tcl/Tk
rs
.