Agrega un os.lseek() para buscar de nuevo al principio de la cadena que escribió. Actualmente escribiste 16 bytes que avanzaron el puntero. Cuando lee, comienza a leer en el puntero actual, por lo que debe retroceder hasta el comienzo de lo que escribió.
Esto funcionó para mí:
#!/usr/bin/python
import os
data = "xxxxxxxxxxxxxxxx"
dev = os.open("/dev/sdp1", os.O_RDWR)
os.write(dev,data)
os.lseek(dev,0,os.SEEK_SET)
print os.read(dev,16)
Según el os.write documentación:
os.open() o pipe() . Para escribir un "objeto de archivo" devuelto por la función integrada open() o por popen() o fdopen() o sys.stdout o sys.stderr , usa su write() método.
No deberías estar mezclando y combinando aquí. Si usa la función global open() para abrir un archivo, solo debe usar el read() del objeto de archivo y write() métodos. Por el contrario, si usa os.open() para abrir un archivo, solo debe usar os.read() y os.write() .
Entonces, intente reemplazar su llamada a open() con os.open(); o mantenga el open() llame y reemplace os.write(dev, ...) con dev.write(...) y reemplaza os.read(dev, ...) con dev.read(...) .