当前位置: 技术问答>linux和unix
关于expect脚本遇到fflush引发的问题?
来源: 互联网 发布时间:2016-11-11
本文导语: 如题,用expect脚本来实现非交互式程序。但是如果原来的代码中有fflush,那么expect脚本执行到这就不往下跑了. 有人知道怎么解决吗?(前提是源代码是不能修改的) 还有,设置标准输入,输出的一些属性之后是不...
如题,用expect脚本来实现非交互式程序。但是如果原来的代码中有fflush,那么expect脚本执行到这就不往下跑了.
有人知道怎么解决吗?(前提是源代码是不能修改的)
还有,设置标准输入,输出的一些属性之后是不是也对expect脚本有影响?
有人知道怎么解决吗?(前提是源代码是不能修改的)
还有,设置标准输入,输出的一些属性之后是不是也对expect脚本有影响?
|
没试过 对原理一向都不是很明白
你可以用perl的expect模块再试试 看看有没有同样的问题
你可以用perl的expect模块再试试 看看有没有同样的问题
|
在expect中,[]就是执行命令并进行结果替换的吧
|
匹配y 或n ?
还是完整匹配
还是完整匹配
[y|n]?
|
这样?
expect "[y|n]"
|
对于那两种写法,我的测试小程序都是可以的
|
书上说“The spawn command normally returns the process id of the newly spawned process.”并解释说“"spawn -open" returns a process id of 0 to indicate no process was spawned. There is no process to kill.”。
给出的例子是:
set pid [spawn program]
. . .
# some time later
exec kill $pid
|
那就讨论一下哈,下面是以前的摸索结果
在expect脚本中添加这样一段,可以输出相关信息 --但不是每次都有效,有时甚至错误..
trap {
if [catch {wait -i -1} output] return
puts "caught SIGCHLD"
puts "pid is [lindex $output 0]"
puts "status is [lindex $output 3]"
} SIGCHLD
|
表示奇怪
fflush() 也是输出信息,会影响expect ?
fflush() 也是输出信息,会影响expect ?
|
测试程序
expect脚本
试验结果可以成功交互
#include
main()
{
char s[64];
printf("hello");
fflush(stdout);
gets(s);
printf("s=[%s]n", s);
}
expect脚本
#!/usr/bin/expect -f
spawn ./a.out
expect "hello"
send "okr"
expect eof
试验结果可以成功交互
|
看了楼上的测试 我就怀疑楼主本身的expect的脚本有问题
|
我不是什么大侠哈
刚学习用expect,你的那些用法我都没见过呢
试试expect -re "y/n" { send "yesr }
刚学习用expect,你的那些用法我都没见过呢
试试expect -re "y/n" { send "yesr }
|
expect "[y/n]" # 此处expect 即使匹配到了[y/n]也不会做任何事情,相当于expect "[y/n]" {}
send "yesr" # 此处send是必然会执行的,不依赖于expect的匹配。
建议你用
expect {
"[y/n]" {send "yesr"}
}
试试?在expect和tcl中[]只需要转义第一个"["就行了,没必要[]。
|
我不是要杀死它
我想知道它正常终止时的退出状态
像在shell中,$?表示上个命令的退出状态
不知道在expect中如何得到?
我想知道它正常终止时的退出状态
像在shell中,$?表示上个命令的退出状态
不知道在expect中如何得到?