Aggiungi un os.lseek() per tornare all'inizio della stringa che hai scritto. Attualmente hai scritto 16 byte che hanno fatto avanzare il puntatore. Quando leggi, inizi a leggere dal puntatore corrente, quindi devi eseguire il backup fino all'inizio di ciò che hai scritto.
Questo ha funzionato per me:
#!/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)
Secondo il os.write documentazione:
Nota: Questa funzione è destinata all'I/O di basso livello e deve essere applicata a un descrittore di file come restituito da
os.open()opipe(). Per scrivere un "oggetto file" restituito dalla funzione integrataopen()o perpopen()ofdopen()osys.stdoutosys.stderr, usa il suowrite()metodo.
Non dovresti mescolare e abbinare qui. Se usi la funzione globale open() per aprire un file, devi usare solo il read() dell'oggetto file e write() metodi. Al contrario, se usi os.open() per aprire un file, devi usare solo os.read() e os.write() .
Quindi, prova a sostituire la tua chiamata al open() con os.open(); oppure, mantieni il open() chiama e sostituisci os.write(dev, ...) con dev.write(...) e sostituisci os.read(dev, ...) con dev.read(...) .