gpt4 book ai didi

tcl - 标准输出重定向

转载 作者:行者123 更新时间:2023-12-02 06:12:03 28 4
gpt4 key购买 nike

我正在使用 tcl 中的一个程序,我无法控制该程序。它在输出窗口上输出很多详细信息,例如:

Response:<?xml version='1.0' encoding='UTF-8'?><soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"><soapenv:Body><soapenv:Fault><faultcode>soapenv:Server</faultcode><faultstring>Item not valid: The specified Standard SIP1 Profile was not found</faultstring><detail><axlError><axlcode>5007</axlcode><axlmessage>Item not valid: The specified Standard SIP1 Profile was not found</axlmessage><request>updatePhone</request></axlError></detail></soapenv:Fault></soapenv:Body></soapenv:Envelope>

有什么方法可以将这个标准输出重定向到变量吗?我是 tcl 新手,不知道如何做到这一点。

最佳答案

如果您使用的是 Tcl 8.6,则可以通过 chan push 添加合适的转换,将所有输出捕获到 stdout :

# Use a class to simplify the capture code
oo::class create CapturingTransform {
variable var
constructor {varName} {
# Make an alias from the instance variable to the global variable
my eval [list upvar \#0 $varName var]
}
method initialize {handle mode} {
if {$mode ne "write"} {error "can't handle reading"}
return {finalize initialize write}
}
method finalize {handle} {
# Do nothing, but mandatory that it exists
}

method write {handle bytes} {
append var $bytes
# Return the empty string, as we are swallowing the bytes
return ""
}
}

# Attach an instance of the capturing transform
set myBuffer ""
chan push stdout [CapturingTransform new myBuffer]

# ... call the problem code as normal ...

# Detach to return things to normal
chan pop stdout

需要注意的事项:这会捕获 channel 上的所有输出,无论其生成方式如何(它甚至可以跨线程工作或在 C 级别生成输出),并且这会将字节myBuffer 中,因为在转换为 channel 配置的编码后应用捕获。并且需要8.6;相关 API 并未暴露给早期版本中的脚本(尽管它的 C 等效项已被某些扩展使用,例如 SSL 支持)。

关于tcl - 标准输出重定向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14530354/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com