pexpect有时命中,有时失败,并及时退出

2024-10-06 10:36:13 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在编写一个小的自动化程序,通过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捕捉到它应该捕捉到的模式?在

编辑:添加的信息


Tags: 用户脚本branchchildnumbervalue菜单timeout
1条回答
网友
1楼 · 发布于 2024-10-06 10:36:13

问题是child.sendline('\n'),程序期望并按下enter键,但是仔细查看日志,我发现在自动化日志中,我得到了两个换行符,而在正常输出中,我有一个换行符。在

在那之后,它和其他的流程搞砸了,这就是为什么我得到了奇怪的东西和新线。在

将其改为child.sendline('')解决了这个问题。在

谢谢你的努力。在

相关问题 更多 >