我正在尝试在串行端口上使用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),它将起作用。但这违背了预期的目的。难道我做错了什么?

最佳答案

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

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

关于Python pexpect : fdpexpect + pyserial == timeout does not work?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36879701/

10-15 12:48