如何输入预期的输入?

时间:2015-11-18 22:46:42

标签: expect

我正在尝试测试一个在STDIN上读取一些输入的程序;要求用户使用向上和向下箭头进行选择,然后按输入;然后终止。

但是我找不到将文本传输到衍生程序的方法。该联机帮助页没有提出任何建议。

我尝试手工生成一个shell并管道内容,但程序仍然执行就像它不在expect脚本中一样,并要求我自己做出选择。

这是我试过的代码。我使用autoexpect生成它,然后手动修改它:

set timeout 10
spawn $env(SHELL)
match_max 100000
send -- "echo \"my\\ninput\\nhere\"|myprogram\r"
send -- "\[B" # down arrow
send -- "\[M" # enter
expect -exact "input\r"
send -- "exit\r"
expect eof

我尝试修改它以直接生成程序,然后将输入传递到expect

set timeout 10
spawn myprogram
match_max 100000
send -- "\[B"
send -- "\[M"
expect -exact "input\r"
expect eof

但是使用echo "my\ninput\nhere" | expect -f script.exp不检查任何内容并等到超时结束 我通过使用expect -exact "foobar"来测试它,这是程序无法输出的:它不会打印任何失败,并且在超时结束时会以0代码退出。

将程序包装在测试脚本中不起作用,因为它检测到它没有在交互式shell中运行并且没有显示其UI:

#! /bin/bash
echo "my\ninput\nhere" | myprogram

我还应该说我不是该程序的作者所以我无法修改它。

更新:如果我删除了向下键并按照评论中的@ glennjackman的说明进行操作:

set timeout 10
spawn $env(SHELL)
match_max 100000
send -- "echo -e \"my\\ninput\\nhere\"|myprogram\r"
expect "Enter"
send -- "\r"
expect -exact "my\r"
send -- "exit\r"
expect eof

0 个答案:

没有答案