在使用 sendlines 的 pexpect 模块中几乎不需要帮助

Need little assistance in pexpect module on the usage of sendlines

我正在使用 pexpect 远程登录到交换机并执行某些操作。

我写了一个简单的代码如下:

child1 = pexpect.spawn(cmd1, timeout = 15)
child1.logfile = sys.stdout
j = child1.expect(prompt_list, timeout = 115)
if j == 1:
    print 'Inside username block'
    child1.sendline('test')
    j = child1.expect(prompt_list, timeout = 15)

当我使用 sendline 时,我在我的日志中看到它被显示了两次。不确定原因。我们可以阻止这种情况吗?

Inside username block
test
test

在不了解您的设置的情况下,我将提出以下解决方案:

child1.setecho(False) # Turn off tty echo

我想你遇到的就是这个 tty echo。

请确保在发送任何内容之前执行此操作,因为这会清空您的传出缓冲区并且您可能会丢失一些信息。

而不是使用

child1.logfile = sys.stdout

使用

child1.logfile_read = sys.stdout