我是用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()]
我加入这些只是为了表明代码生成的程序是一致的。 我相信输出的例子才是我们应该看的。
pexpect.run(events=[(pat1, reply1), (pat2, reply2)])
它不会先匹配模式1并发送回复1,然后等待匹配模式2并发送回复2.相反,它一直尝试匹配任何一个模式,尽管它是按照给定的顺序进行测试。
因此,重复相同的模式是没有意义的,因为第一次出现的模式永远是唯一匹配的模式,如果有的话。
如果你想进行一系列相似的匹配,你将不得不使用通常的 spawn()
, expect()
, send()
, expect()
, send()
,......机制。