Python pexpect:fdpexpect + pyserial == timeout不起作用?

时间:2016-04-27 03:25:31

标签: python automation serial-port pyserial pexpect

我正在尝试在串口上使用pexpect。我按照建议使用fdpexpect。但我注意到expect()不遵守超时。相反,EOF发生了。

ser = serial.Serial(sys.argv[1], 9600)
fd = fdpexpect.fdspawn(ser.fd)
fd.send('%s\r' % username)
i = fd.expect(['Password:', pexpect.TIMEOUT], timeout=30)
if i == 0:
    fd.send('%s\r' % password)
else:
    print 'Boom!'

似乎不是捕捉它们,而是几乎立即引发pexpect.exceptions.EOF。如果我将pexpect.EOF添加到匹配列表中,EOF将立即匹配。当然,它是一个串口,数据很可能尚未到来。如果我在fd.expect()之前添加time.sleep(1),它将起作用。但这违背了期望的目的。我做错了吗?

1 个答案:

答案 0 :(得分:0)

每当您使用fdpexpect而不是带有衍生终端的普通pexpect时,都必须担心会遇到该文件流的EOF。有关更多信息,请参见以下答案:https://stackoverflow.com/a/25770830

我还发现,将maxread=1添加到pexpect.fdpexpect.fdspawn可以帮助解决此问题,但这也会减慢文本的阅读速度。