GNU/Linux >> Belajar Linux >  >> Linux

Bagaimana cara melakukan I/O tingkat rendah pada file perangkat Linux dengan Python?

Tambahkan os.lseek() untuk mencari kembali ke awal string yang Anda tulis. Saat ini Anda menulis 16 byte yang memajukan pointer. Saat Anda membaca, Anda mulai membaca pada penunjuk saat ini sehingga Anda perlu mencadangkannya ke awal dari apa yang Anda tulis.

Ini berhasil untuk saya:

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

Menurut os.write dokumentasi:

Catatan: Fungsi ini ditujukan untuk I/O tingkat rendah dan harus diterapkan ke deskriptor file seperti yang dikembalikan oleh os.open() atau pipe() . Untuk menulis "objek file" yang dikembalikan oleh fungsi bawaan open() atau dengan popen() atau fdopen() , atau sys.stdout atau sys.stderr , gunakan write() nya metode.

Anda tidak boleh mencampur dan mencocokkan di sini. Jika Anda menggunakan fungsi global open() untuk membuka file, maka Anda hanya boleh menggunakan read() objek file dan write() metode. Sebaliknya, jika Anda menggunakan os.open() untuk membuka file, maka anda hanya perlu menggunakan os.read() dan os.write() .

Jadi, coba ganti panggilan Anda ke open() dengan os.open(); atau, simpan open() panggil, dan ganti os.write(dev, ...) dengan dev.write(...) dan ganti os.read(dev, ...) dengan dev.read(...) .


Linux
  1. Bagaimana Anda melakukan non-blocking console I/O di Linux di C?

  2. Bagaimana cara membersihkan cache I/O disk di Linux?

  3. Cara mengeksekusi file python di linux

  1. Cara menginstal Python di Linux

  2. Cara mendeteksi penekanan tombol pada terminal Linux, gaya level rendah dengan python

  3. Linux:Perbedaan antara /dev/console , /dev/tty dan /dev/tty0

  1. Pelajari Dasar-dasar Cara Kerja Pengalihan I/O (Input/Output) Linux

  2. Seberapa Portabel /dev/stdin, /dev/stdout Dan /dev/stderr?

  3. Linux – Menentukan File Tertentu yang Bertanggung Jawab Untuk I/o Tinggi?