首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用expect基于返回的值执行条件

如何使用expect基于返回的值执行条件
EN

Stack Overflow用户
提问于 2022-06-06 20:26:53
回答 1查看 54关注 0票数 0

我正在处理一个expect脚本,它将根据硬件返回的值执行一个条件。我想使用expect来自动化这个过程,但是,我不确定我是否要正确地这样做,如下面的代码所示。

代码语言:javascript
复制
#! /bin/expect 
set timeout 5 
puts "Spawning serial connection"
spawn -open [open /dev/ttys1 w+]
send --"\r"
expect "barebox: /"
send --"?\r"
expect "barebox: /"
#I2C communication to initiate test pattern test
send "i2c_write -b 1 -a 0x50 -r 0x105 -w 0x02 0xf0\r"
expect "barebox: /"
send "i2c_write -b 1 -a 0x50 -r 0x105 -w 0x01 0xf0\r"
expect "barebox: /"
send "i2c_read -b 1 -a 0x50 -r 0x108 -w 0x03 0xh0\r"

#checking to see if value returned matches any of the following conditions
expect{
while{"0x04 0x00}{
  put "FPGA still busy/r"
  send "i2c_read -b 1 -a 0x50 -r 0x108 -w 0x03 0xh0\r"
}
if{"0x00 0x00}{
  put "Test Pattern test successful\r"
}
elseif{"0x08 0x00}{
  put "Test Pattern test failed\r"
}
}
put "End of Test Pattern test\r"
EN

回答 1

Stack Overflow用户

发布于 2022-06-06 20:57:05

您可以将循环和测试编写为:

代码语言:javascript
复制
expect {
    "0x04 0x00" {
        puts "FPGA still busy"
        send "i2c_read -b 1 -a 0x50 -r 0x108 -w 0x03 0xh0\r"
        exp_continue
    }
    "0x00 0x00" {
        puts "Test Pattern test successful"
    }
    "0x08 0x00" {
        puts "Test Pattern test failed"
    }
}

在循环中有一个延迟可能是明智的,这样就不会用连续的请求来敲碎远程系统。例如,通过在sleep 1之前添加行send,每次可以等待1秒。有关详细信息,请参阅https://www.tcl-lang.org/man/expect5.31/expect.1.html的文档

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72523130

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档