实现支持memoryview和bytes的`write()`方法的最佳方法是什么

时间:2014-01-20 03:43:13

标签: python pyserial memoryview

背景

具有“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.BufferedRWPairmemoryview个对象。并在ser.write() 代码使用bytes(data)来转换传递的对象,从而得到一些东西 比如“< memory at 0x061F54E0>”。

问题

如果我需要实现write()方法,那么实现它的最佳方法是什么 可以处理memoryviewbytes对象吗?

以下是我的意见:

  • 使用isinstance()
  • data = memoryview(data).tobytes()

0 个答案:

没有答案