问题描述
我正在尝试为位于父进程与其子进程之间并在它们之间传递stdin,stdout和stderr的程序创建包装脚本。 我很乐意使用bash,expect或任何其他合适的工具。
我的要求是:
目的是在引擎盖下使用真实子进程的同时模拟子进程的某些故障模式。
期望似乎是显而易见的选择,但是我很难找到比基本文档更多的东西(有一个scan of exploring expect online,但它不可搜索)。 到目前为止,我有类似以下内容:
#!expect
log_file expect.log
spawn -noecho <mychild process>
trap {send "quit\n"} SIGTERM
#interact -o { "param" { puts "foobar" } }
expect_background {
-re "output from child program 1" {
puts "some other output instead"
# no error reported but seems to be a null-op / ignored error
puts $expect_out(1,string)
#okay - in a loop
break
}
}
interact {
-re "input from parent" {
puts "some input"
uplevel 0 { puts [ info vars ] }
# no such var
# puts $interact_out(1,string)
# not in a loop
# break
}
}
我实际上想使用interact -o
来更改发送回父级的子进程的输出,但是我无法理解语法。因此,我改用expect_background
。
-
此处正确的语法是什么?
-
如何从交互块中访问匹配的文本?
man page说我可以使用
expect_out
和interact_out
,但是只有在expect
或interact
命令完成后才能使用。expect_out
和interact_out
不能通过info vars
列出,它们是什么? 我认为它们是正则表达式匹配项,并且仅在使用-re
时可用,但这尚不明确(尝试时似乎不起作用)。 -
我可以在
break
中使用expect_background
,但不能在interact
中使用。我可以用什么来突破它? -
或者我如何获得相同的原始bash?
我在那里错过了更好的文档吗?还是他们那里有一些现代或更完善的替代方案?我知道pexpect。我不确定它的“ interact
”是否和最初的预期一样先进(基于此What can Expect do that Pexpect can not do?)。
我研究得越多,就越倾向于用C ++或python编写自己的单一用途包装器。我正在这里寻找可以避免这种麻烦的快速修复方法。
根据CLI提示,我似乎正在使用Expect1.1,但apt信息显示:“版本:5.45.4-2build”
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)