使用 expect_out(buffer) 消失输出

问题描述

使用语言:TCL/Expect

当我打印 expect_out(buffer) 的输出时,它出于某种原因删除了整个打印行。我不知道这是做什么的。我什至用 -nonewline 分解了“puts”输出,以确保这一行的输出也消失了。

代码


     set var $expect_out(0,string)
     foreach line [split $var \n] {
         puts -nonewline "line: "
         puts $line
     }

输出


    somedata
    line: somemoredata
    line: evensomemoredata

预期输出


    line: somedata
    line: somemoredata
    line: evensomemoredata

什么会导致这个输出?我该如何解决这个问题?

*回答后编辑:

为了帮助其他人在 Expect 中解决此问题,可以在您的 expect 脚本中添加以下命令以进行故障排除:

    exp_internal 1

显示了正在发生的一切,包括返回的缓冲区中的值。

解决方法

通常在 Expect 中,生成的程序输出中的 \n 字符将被转换为 \r\n。您可以像这样手动删除 \r 字符:

set var $expect_out(0,string)
set var [regsub -all "\r" $var ""]
... ...