在Tcl中加载包时重定向stdout

时间:2016-11-04 14:47:12

标签: tcl

我想在Windows Tcl中加载包时将stdout重定向到null。 (重定向“质量Windows音频/视频体验(qWAVE)支持的措辞可用。”为null)

他们有什么方法可以解决这个或任何想法吗?非常感谢你。

C:\Users\Tester>tclsh
%       set ixchariot_installation_dir "C:/Program Files x86)/Ixia/IxChariot"
C:/Program Files (x86)/Ixia/IxChariot
%       cd $ixchariot_installation_dir
%       load ChariotExt
Quality Windows Audio/Video Experience (qWAVE) support is available.

1 个答案:

答案 0 :(得分:0)

如果库正在使用Tcl通道来编写其消息,并且您正在使用Tcl 8.6,那么它非常简单。您只需在吞下所有字节的stdout频道上推送变换。

# Most of this is boiler-plate stuff...
namespace eval swallow {
    proc initialize {handle mode} {
        return {initialize clear finalize write flush}
    }
    proc clear {handle} {}
    proc finalize {handle} {}
    proc flush {handle} {}
    # The important one; do nothing to throw away bytes
    proc write {handle buffer} {}
    # Export as an ensemble
    namespace export *
    namespace ensemble create
}

# Start dropping output
chan push stdout swallow
load ChariotExt
# Stop dropping output
chan pop stdout

如果库使用Tcl通道写入消息,则有效。如果它使用直接写入(更可能的情况)它不会。您可以尝试完全重定向,但这些不容易撤消。

close stdout
open NUL
load ChariotExt

我知道它适用于POSIX系统(/dev/null代替NUL除外)。在Windows上不确定。并且 无法轻松撤消; 旧标准输出流已消失。

在任何情况下,库都可能直接写入控制台;那些是不可阻挡的,你可能只需忍受这种恼人的信息。