如何获得expect中spawn的命令的返回值?

如何获得expect中spawn的命令的返回值?

我们写一个名为test.exe的小程序,程序的源码如下:

#include <stdlib.h>
#include <string>
#include <iostream>
int main(int argc, char* argv[])
{
    std::cout << "please input data:" << std::endl;
    std::string data;
    std::getline(std::cin, data);
    int ret = atoi(data.c_str());
    std::cout << "input data :" << data << std::endl;
    std::cout << "will return:" << ret << std::endl;
    return ret;
}
我们写一个脚本:

#!/usr/bin/expect
spawn test.exe
expect "please input data:"
send "110\n"
expect eof
catch wait result
exit [lindex $result 3]
解释:
第6行:catch wait result
解释:将wait命令的返回值存储到result变量中. result变量并不是一个特殊变量, 你可以随意换一个新名字(比如retVal).
备注:wait命令的返回值是一个"%d %s 0 %d"格式的字符串,第0个值是pid,第1个是spawn_id(不知道它具体带表了什么),第2个应当是代表脚本是否正常完成,第3个是子进程的返回值.
第7行:exit [lindex $result 3]
将result变量(这个变量存储的是一个列表)list中的index=3的那个值取出来,返回它。你可以搜索"Tcl 列表 lindex"以查看详细信息。

怎么在一个shell脚本中嵌进去expect的调用?

例子:

#!/bin/bash
DATA="120"
echo "variable is ${DATA}"
echo "will call expect."
expect -c '
spawn test.exe
expect "please input data:"
send '${DATA}'\n
expect eof
catch wait result
exit [lindex $result 3]
'
echo "call expect finish."

未完待续。

我这样写,为什么无法执行?

#!/usr/bin/expect
spawn test.exe
expect {
    "data:" {
        send_user "find [data:], will send data."
        send "119\r"
        exp_continue
    }
    eof {
        send_user "find [eof]."
    }
}
send_user "all done..."
我也不知道,正在解决中。。。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值