我正在编写一个小型自动化程序,通过ssh连接到远程服务器,激活PERL脚本并与脚本交互(生成菜单供用户选择)。 我有一个用户预定义的回复列表,我已经完成了PERL脚本并记下了菜单提示,以便在" pexpect"中使用它。 现在,我有:
global MYTIMEOUT
print "starting building"
child.sendline('/root/myscripts/perl/_build_.pl')
child.expect('username',timeout=MYTIMEOUT)
child.sendline(value_dict['myname'])
child.expect('reason',timeout=MYTIMEOUT)
child.sendline(value_dict['myreason'])
child.expect(value_dict["branch"],timeout=MYTIMEOUT)
child.sendline(branch_number)
child.expect('enter revision',timeout=MYTIMEOUT)
child.sendline('\n')
child.expect('choose customers',timeout=MYTIMEOUT)
child.sendline(value_dict['customers'])
child.expect('choose number',timeout=MYTIMEOUT)
child.sendline(value_dict['component_list'])
所以username,reason,branch and revision
的期望都可以正常工作,当我打开孩子的日志文件时,我可以清楚地看到他们回应了他们正确的行。
在此之后,PERL脚本执行了一些代码,大约5-6秒,在其中输出运行它的人的shell信息,之后,我到'choose customers' and 'choose number'
发送线忽略我写了什么,并为客户发送[返回]值,当它期望选择数字时,它不发送任何东西,并最终超时。
有什么办法迫使发送方服从我?或者确保期望捕获,因为它应该捕获模式?
编辑:添加信息
答案 0 :(得分:1)
问题是config.assets.paths << "#{Gem.loaded_specs['gemname'].full_gem_path}/app/assets/stylesheets/gemname"
,程序预期并输入按键,但仔细查看日志我看到在自动化日志中,我有两个换行符,而在正常输出中,我有一个换行符。
将其更改为child.sendline('\n')
解决了它。
感谢任何尝试过的人。