Ошибка атрибута PySerial с «read_until» - PullRequest
0 голосов
/ 17 марта 2020

Мне нужна помощь в устранении ошибки атрибута в моем коде Python.

Я работаю с последовательным устройством, подключенным / dev / ttyUSB0 к Raspberry Pi 2B . Моя цель этого кода - непрерывное чтение последовательных данных с последовательного устройства и выделение команд, обозначенных символом '@' вместо / n или /r.

Этот проект все еще на ранних стадиях, но из некоторых быстрых исследований я выполнил атрибут pyserial 'read_until' , который отлично бы работал в качестве основы. Это позволило бы мне читать по одному байту за раз и останавливаться на символе «@», а затем обрабатывать данные, прежде чем перейти к следующей части последовательных данных.

По какой-то причине я получаю Атрибут Ошибка при попытке использовать read_until, утверждая, что объект Serial не имеет этой функции. Ниже приведен тестовый код, который я использую, и ошибка, которую он выдает:

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()

А вот вывод, который мне дал этот код:

>>>
/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'
>>>

Разочарование за этим этот read_until должен был быть импортирован вместе с последовательной библиотекой. Возможно, я упускаю что-то довольно простое, но было бы очень полезно, если бы я мог использовать этот атрибут. Большинство других вопросов о read_until ссылаются на telnetlib, который, насколько я знаю, не совпадает с тем, что есть в PySerial.

Вот ссылка на сайт, где я нашел документацию, в которой говорится, что read_until 'должен принадлежать PySerial: https://pyserial.readthedocs.io/en/latest/pyserial_api.html

Просто, чтобы вы знали, я очень новичок в программировании в целом. Некоторые из жаргонов, которые используют такие опытные программисты, как вы, могут go над моей головой, и поэтому я не знаю, как реализовать решения, которые у вас есть. Я прошу вашего терпения, поскольку я узнаю больше о программировании и Python в целом.

Большое спасибо за ваше время!

1 Ответ

0 голосов
/ 17 марта 2020

Кажется, у вас установлена ​​PySerial версии 2.6. Эта версия была выпущена в 2011 , а метод read_until был добавлен в 2015 .

Самый простой способ установить последнюю версию (как вы обнаружили, ) использовать pip:

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

Обратите внимание, что использование pip с sudo является плохой практикой .
Лучше всего использовать виртуальную среду или использовать флаг --user, как показано выше.

...