GNU/Linux >> Tutoriels Linux >  >> Linux

Comment effectuer des E/S de bas niveau sur un fichier de périphérique Linux en Python ?

Ajouter un os.lseek() pour revenir au début de la chaîne que vous avez écrite. Actuellement, vous avez écrit 16 octets qui ont avancé le pointeur. Lorsque vous lisez, vous commencez à lire au pointeur actuel, vous devez donc le sauvegarder au début de ce que vous avez écrit.

Cela a fonctionné pour moi :

#!/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)

Selon le os.write documents :

Remarque : Cette fonction est destinée aux E/S de bas niveau et doit être appliquée à un descripteur de fichier tel que renvoyé par os.open() ou pipe() . Pour écrire un "objet fichier" renvoyé par la fonction intégrée open() ou par popen() ou fdopen() , ou sys.stdout ou sys.stderr , utilisez son write() méthode.

Vous ne devriez pas mélanger et assortir ici. Si vous utilisez la fonction globale open() pour ouvrir un fichier, vous devez uniquement utiliser le read() de l'objet fichier et write() méthodes. Inversement, si vous utilisez os.open() pour ouvrir un fichier, alors vous ne devez utiliser que os.read() et os.write() .

Alors, essayez de remplacer votre appel par open() avec os.open(); ou, gardez le open() appeler et remplacer os.write(dev, ...) avec dev.write(...) et remplacer os.read(dev, ...) avec dev.read(...) .


Linux
  1. Comment installer Python sur Linux

  2. Apprenez les bases du fonctionnement de la redirection Linux I/O (Entrée/Sortie)

  3. Quelle est la portabilité de /dev/stdin, /dev/stdout et /dev/stderr ?

  4. Comment purger les caches d'E/S disque sous Linux ?

  5. Comment exécuter un fichier python sous Linux

Comment déplacer un fichier sous Linux

Comment créer un fichier sous Linux

Comment créer un lien symbolique vers un fichier sous Linux

Comment ajouter un nouveau périphérique au système de fichiers BTRFS sous Linux

Linux :Différence entre /dev/console , /dev/tty et /dev/tty0

Fichier spécial qui provoque une erreur d'E/S