我正在编写一个小的自动化程序,通过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'])
因此,expect和username,reason,branch and revision
都可以正常工作,当我打开子对象的日志文件时,我可以清楚地看到它们对正确的行做出了响应。
在这之后,PERL脚本将执行一些代码,大约5-6秒,在这段时间里,他将运行它的人的shell信息输出到shell,之后,我得到'choose customers' and 'choose number'
发送线忽略我写的内容,对于客户发送一个[return]值,当它期望choose number时,它不发送任何东西,最后超时。在
有没有办法强迫发送线服从我?或者确保expect捕捉到它应该捕捉到的模式?在
编辑:添加的信息
问题是
child.sendline('\n')
,程序期望并按下enter键,但是仔细查看日志,我发现在自动化日志中,我得到了两个换行符,而在正常输出中,我有一个换行符。在在那之后,它和其他的流程搞砸了,这就是为什么我得到了奇怪的东西和新线。在
将其改为
child.sendline('')
解决了这个问题。在谢谢你的努力。在
相关问题 更多 >
编程相关推荐