我正在尝试在串行端口上使用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/