python/ python-2.7/ pyserial

I am using python 2.7.2 with pyserial 2.6. What is the best way to use pyserial.readline() when talking to a device that has a character other than "\\n" for eol? The pyserial doc points out that pyserial.readline() no longer takes an 'eol=' argument in python 2.6+, but recommends using io.TextIOWrapper as follows: ser = serial.serial_for_url('loop://', timeout=1) sio = io.TextIOWrapper(io.BufferedRWPair(ser, ser))

However the python io.BufferedRWPair doc specifically warns against that approach, saying "BufferedRWPair does not attempt to synchronize accesses to its underlying raw streams. You should not pass it the same object as reader and writer; use BufferedRandom instead."

Could someone point to a working example of pyserial.readline() working with an eol other than 'eol'?

Thanks, Tom

read() has a user-settable maximum size to the data it reads(in bits), if your data strings are a predictable length you could simply set that to capture a fixed-length string. it's sort of 'kentucky windage' in execution but so long as your data strings are consistent in size it won't bork.

beyond that, your real option is to capture and write the data stream to another file and split out your entries manually/programatically.

for example, you could write your datastream to a .csv file, and adjust the delimiter variable to be your EoL character.

Assume s is an open serial.serial object and the newline character is \\r. Then this will read to end of line and return everything up to '\\r' as a string.

def read_value(encoded_command):
    s.write(encoded_command)
    temp = ''
    response = ''
    while '\r' not in response:
        response = s.read().decode()
        temp = temp + response
    return temp

And, BTW, I implemented the io.TextIOWrapper recommendation you talked about above and it 1)is much slower and 2)somehow makes the port close.

暂无
暂无

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

Related Question python 3 and pyserial 2.7 No Readline Support in Python 2.7 Readline functionality on windows with python 2.7 pyserial 2.7, python 3.3, sending carriage returns Converting PySerial Code from Python 3 to 2.7 How to find the byte data in pyserial readline in Python 3.x pyserial readline() : SerialException python pyserial readline not working, but screen kinda does, worked in ubuntu 16 Increasing pyserial readline speed `Serial` attribute missing with the pyserial library (ubuntu 16.04 with python 2.7)
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM