【问题标题】:Proper Error handling EXPECT / TCL正确的错误处理 EXPECT / TCL
【发布时间】:2015-09-08 15:36:42
【问题描述】:

防止向死进程发送命令的最佳方法是什么?

有时我的会话在应该打开时被终止,所以我最终发送命令并收到错误:

send: spawn id exp4 not open

我正在尝试做类似的事情

if [catch send "test\r"] {
      puts "send error!"
}

但似乎查询每次都为真。

这是最简单的例子,但我有更复杂的“发送/期望”,我使用捕获组等,因此在每个“发送/期望”或创建函数周围放置一个 catch 似乎没有那么有用。

你能用catch 包裹整个程序吗?捕获此类错误的正确方法是什么?

【问题讨论】:

    标签: tcl expect


    【解决方案1】:

    Expect 作者写了一个常见问题解答来解决这个问题:http://expect.sourceforge.net/FAQ.html#q64

    好像你想要类似的东西

    expect_before {
        eof { respawning_the_process }
    }
    

    我确定有一些问题需要解决(例如当流程应该结束时该怎么办)

    这个问题:

    if [catch send "test\r"] {
    

    是双重的:

    1. 您没有在条件周围加上大括号,因此没有在正确的时间对其进行评估。
    2. 您没有为catch 命令提供正确的参数

    你会想写:

    if {[catch {send "test\r"} output] != 0} {
    

    这可以抽象成一个过程

    proc send {args} {
        set status [catch [list exp_send {*}$args] output]
        # error handling if $status is non-zero
    }
    

    “exp_send”是expect“send”命令的内置别名,因此使用proc覆盖“send”是安全的,从而最大限度地减少您需要的代码更改量。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-06-29
      相关资源
      最近更新 更多