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.stdout
osys.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(...)
.