【问题标题】:Why does pexpect duplicate commands in Python 3为什么在 Python 3 中会出现重复的命令
【发布时间】:2020-06-03 18:54:28
【问题描述】:

我正在使用 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()]

顶部的交互式程序是通过以下方式生成的:

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

我只包含这些以表明代码正在生成一致的程序。我相信输出示例是我们应该关注的。

【问题讨论】:

    标签: python-3.x pexpect


    【解决方案1】:

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

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

    如果你想进行一系列类似的匹配,你将不得不求助于通常的spawn()expect()send()expect()send()、...机制。

    【讨论】:

    • 这很可悲。我使用 unix expect 命令进行了此操作,该命令确实遵循创建的“程序”的顺序。我正在测试软件,否则我什至不想这样做。一个有效的帐户和密码适用于现实世界的工作。使用 expect(),send() 非常笨拙。嗯,我想我可以创建一个循环并一次从我的列表中提取一项并将其发送到运行。那应该模拟同样的事情。想知道我可以让 SCR 进入谁。
    • doh...这当然行不通。您在发出程序的同时发出命令。 Ugg... 它必须是 SCR 或使用 expect()、send() 方法。我不喜欢为我编写的每一个独特的测试编写特定的代码。我通常创建数组并将其发送到我编写的一个非常小的运行器类。多想想。
    猜你喜欢
    • 1970-01-01
    • 2022-09-24
    • 2013-05-13
    • 1970-01-01
    • 1970-01-01
    • 2017-04-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多