我正在尝试在串口上使用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),它将起作用。但这违背了期望的目的。我做错了吗?
答案 0 :(得分:0)
每当您使用fdpexpect
而不是带有衍生终端的普通pexpect
时,都必须担心会遇到该文件流的EOF。有关更多信息,请参见以下答案:https://stackoverflow.com/a/25770830。
我还发现,将maxread=1
添加到pexpect.fdpexpect.fdspawn
可以帮助解决此问题,但这也会减慢文本的阅读速度。