Kesalahan Atribut PySerial dengan 'read_until'

Saya memerlukan bantuan untuk memecahkan masalah Kesalahan Atribut dalam kode Python saya.

Saya bekerja dengan perangkat serial yang dihubungkan oleh /dev/ttyUSB0 ke Raspberry Pi 2B. Tujuan saya untuk kode ini adalah membaca data serial langsung secara terus menerus dari perangkat serial dan memisahkan perintah yang digambarkan dengan simbol '@' alih-alih /n atau /r.

Proyek ini masih dalam tahap awal tetapi dari beberapa penelitian singkat yang telah saya lakukan, atribut pyserial 'read_until' akan berfungsi dengan sempurna sebagai tulang punggungnya. Ini akan memungkinkan saya membaca dalam satu byte pada satu waktu dan berhenti pada simbol '@', dan kemudian memproses data sebelum melanjutkan ke bagian data serial berikutnya.

Untuk beberapa alasan saya mendapatkan Kesalahan Atribut ketika saya mencoba menggunakan 'read_until' yang mengklaim bahwa objek 'Serial' tidak memiliki fungsi ini. Di bawah ini adalah kode pengujian yang saya gunakan dan kesalahan yang muncul kembali:

import serial

gc = serial.Serial('/dev/ttyUSB0', baudrate = 230400)
print(gc.name)

def getCommand():
    gcData = gc.read_until('@', 1).decode('ascii')
    print(gcData)

getCommand()

gc.close()

Dan inilah output yang diberikan kode ini kepada saya:

>>>
/dev/ttyUSB0
Traceback (most recent call last):
  File "/home/pi/Python/GC/serialRead1.py", line 10, in <module>
    getCommand()
  File "/home/pi/Python/GC/serialRead1.py", line 7, in getCommand
    gcData = gc.read_until('@', 1).decode('ascii')
AttributeError: 'Serial' object has no attribute 'read_until'
>>>

Hal yang membuat frustrasi di balik hal ini adalah 'read_until' seharusnya diimpor bersama dengan perpustakaan serial. Mungkin saya melewatkan sesuatu yang cukup sederhana, tetapi akan sangat membantu jika saya dapat menggunakan atribut ini. Sebagian besar pertanyaan lain tentang 'read_until' merujuk pada 'telnetlib' yang sejauh yang saya tahu tidak sama dengan yang dimiliki PySerial.

Berikut ini tautan ke situs web tempat saya menemukan dokumentasi yang mengatakan bahwa 'read_until' seharusnya menjadi milik PySerial: https://pyserial.readthedocs.io/en/latest/pyserial_api.html

Asal tahu saja, saya sangat baru dalam pemrograman secara umum. Beberapa jargon yang digunakan oleh programmer berpengalaman seperti Anda mungkin berlebihan sehingga saya mungkin tidak tahu bagaimana melakukan solusi yang Anda miliki. Saya meminta kesabaran Anda saat saya mempelajari lebih lanjut tentang pemrograman dan Python secara umum.

Terima kasih banyak atas waktu Anda!


person Sgt_Baconbits    schedule 17.03.2020    source sumber
comment
versi Python mana yang Anda gunakan ??   -  person Mohammad Zain Abbas    schedule 17.03.2020
comment
Saya menggunakan Python 3.4.2 di Raspberry Pi 2B.   -  person Sgt_Baconbits    schedule 17.03.2020
comment
Silakan jalankan perintah berikut di terminal dan tambahkan hasilnya ke postingan Anda: python3 -c 'import serial; print(serial.__version__)'   -  person tttapa    schedule 17.03.2020
comment
@tttapa Saya menggunakan perintah yang Anda berikan kata demi kata di terminal dan inilah hasilnya: Traceback (most recent call last): File "<string>", line 1, in <module> Attribute Error: 'module' object has no attribute '__version__'   -  person Sgt_Baconbits    schedule 17.03.2020
comment
Kedengarannya seperti versi yang sangat lama. Atribut __version__ ditambahkan pada tahun 2016. Bagaimana Anda menginstal PySerial? Anda dapat mencoba python3 -c 'import serial; print(serial.VERSION)' sebagai gantinya.   -  person tttapa    schedule 17.03.2020
comment
@tttapa Itu berhasil. Dikatakan itu pada versi 2.6. Saya menginstalnya pada awalnya dengan sudo apt-get install python-serial Saya merasa menarik karena Anda mengatakan itu adalah versi yang sangat lama. Saya mencari cara terbaru untuk menginstal pip, dan mencoba sudo python3 -m pip install --upgrade pyserial Ini tidak lagi memberi saya Kesalahan Atribut. Apakah saya akan melompat terlalu jauh untuk mengatakan bahwa ini sudah diperbaiki?   -  person Sgt_Baconbits    schedule 17.03.2020


Jawaban (1)


Tampaknya Anda telah menginstal PySerial versi 2.6. Versi ini dirilis pada 2011, sedangkan metode read_until ditambahkan pada 2015.

Cara termudah untuk menginstal versi terbaru (seperti yang Anda temukan) adalah dengan menggunakan pip:

sudo apt install python3-pip
python3 -m pip install --user pyserial

Perhatikan bahwa menggunakan pip dengan sudo adalah praktik buruk.
Sebaiknya gunakan lingkungan virtual atau ke gunakan tanda --user, seperti yang ditunjukkan di atas.

person tttapa    schedule 17.03.2020