背景
具有“wb”模式的文件对象的write()
方法支持memoryview和bytes:
v = memoryview("abc")
with open("txt.txt", "wb") as f:
f.write( v )
当我使用推荐的pyserial方法时readline()
:
import serial
import io
ser = serial.serial_for_url('loop://', timeout=1)
sio = io.TextIOWrapper(io.BufferedRWPair(ser, ser))
sio.write(unicode("hello\n"))
sio.flush() # it is buffering. required to get the data out *now*
hello = sio.readline()
print hello == unicode("hello\n")
引发了错误:IOError: raw write() returned invalid length 22
。
我对此进行了调查,发现该对象传递给了ser.write()
io.BufferedRWPair
是memoryview
个对象。并在ser.write()
代码使用bytes(data)
来转换传递的对象,从而得到一些东西
比如“< memory at 0x061F54E0>”。
问题
如果我需要实现write()
方法,那么实现它的最佳方法是什么
可以处理memoryview
和bytes
对象吗?
以下是我的意见:
isinstance()
data = memoryview(data).tobytes()