pexpect有时命中,有时失败并在超时时退出

时间:2016-06-29 13:35:59

标签: python python-2.7 pexpect

我正在编写一个小型自动化程序,通过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'发送线忽略我写了什么,并为客户发送[返回]值,当它期望选择数字时,它不发送任何东西,并最终超时。

有什么办法迫使发送方服从我?或者确保期望捕获,因为它应该捕获模式?

编辑:添加信息

1 个答案:

答案 0 :(得分:1)

问题是config.assets.paths << "#{Gem.loaded_specs['gemname'].full_gem_path}/app/assets/stylesheets/gemname",程序预期并输入按键,但仔细查看日志我看到在自动化日志中,我有两个换行符,而在正常输出中,我有一个换行符。

在那之后,它与剩下的流程搞砸了,这就是为什么我得到奇怪的nothings和换行符。

将其更改为child.sendline('\n')解决了它。

感谢任何尝试过的人。

相关问题