为什么Pexpect在Python 3中会出现重复的命令?

问题描述 投票:0回答:1

我是用pexpect来发送这个命令的。

fmsadmin list files -s

通过这个交互式程序

[('username \\(.+\\):', 'userName\n'), ('password:', 'invalidPW\n'),
('username \\(.+\\):', 'userName\n'), ('password:', 'validPW\n')]

像这样。

run( cmd, events=program, timeout=20)

结尾是4对用户名& 密码,而不是2对。

username (userName): userName
password:
fmsadmin: Permission denied, please try again.
username (userName): userName
password:
fmsadmin: Permission denied, please try again.
username (userName): userName
password:
fmsadmin: Permission denied, please try again.
username (userName): userName
password:
fmsadmin: Permission denied.
Error: 9 (Access denied)

是不是互动程序的结构有问题? 也许有不同的计时器来等待短语的出现? 为什么我只编程2对,却得到4对。 另外,对我来说,用户名和密码的这些小程序都是独立的功能。 当我做一个1对版本的功能时,它可以工作。 我的意思是

这就可以了

[('username \\(.+\\):', 'userName\n'), ('password:', 'validPW\n')]

上面的交互式程序是这样的

[iUserName(), iPassword()]

上面的交互式程序是由doing产生的。

[iUserName(), invPassword(), iUserName(), iPassword()]

我加入这些只是为了表明代码生成的程序是一致的。 我相信输出的例子才是我们应该看的。

python-3.x pexpect
1个回答
0
投票

pexpect.run(events=[(pat1, reply1), (pat2, reply2)])它不会先匹配模式1并发送回复1,然后等待匹配模式2并发送回复2.相反,它一直尝试匹配任何一个模式,尽管它是按照给定的顺序进行测试。

因此,重复相同的模式是没有意义的,因为第一次出现的模式永远是唯一匹配的模式,如果有的话。

如果你想进行一系列相似的匹配,你将不得不使用通常的 spawn(), expect(), send(), expect(), send(),......机制。

© www.soinside.com 2019 - 2024. All rights reserved.