som*_*ser 5 python automation serial-port pexpect pyserial
我正在尝试在串行端口上使用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!'
Run Code Online (Sandbox Code Playgroud)
似乎没有抓住任何一个,而是几乎立即提高了pexpect.exceptions.EOF。如果我将pexpect.EOF添加到匹配列表中,则EOF将立即匹配。当然,这是一个串行端口,数据很可能尚未到达。如果我在fd.expect()之前添加time.sleep(1),它将起作用。但这违背了预期的目的。难道我做错了什么?
每当您使用生成的终端fdpexpect而不是普通pexpect终端时,您都必须担心会碰到该文件流的 EOF。有关更多信息,请参阅此答案:/sf/answers/1803958131/。
我还发现添加maxread=1topexpect.fdpexpect.fdspawn可以帮助解决这个问题,但这也会减慢阅读文本的速度。