Phil wrote: > Thank you for reading this. > > The following code sends "Fred" to my serial connected device without > any problems. > > import serial > > ser = serial.Serial('/dev/ttyACM0',9600) > ser.write(b'Fred\n') > > > I'm trying to do the same under pyqt but I'm having trouble converting a > string to a byte array. This works correctly from the pyqt IDE but not > from the console. python3 mycode.py generates "typeError: string > argument without an encoding" > > It's very likely that my method of converting a string to a byte array > is incorrect. This is my attempt: > > mytext = "Fred" > mybytes = bytes(mytext) > byte = byte + '\n' > ser.write(mybytes)
This is a bit of a mess. Always cut and paste actual code that you want to show. If there is an exception include the traceback. > I don't understand why this works from the pyqt IDE but not when run > from the console. I suppose the IDE is adding the correct encoding. I > suspect utf8 is involved somewhere. When you want to convert a string to a byte sequence it is your turn to decide about the encoding. With "Fred" even ASCII would work. When Python doesn't pick a default you have to specify it yourself, e. g. if you want to use UTF-8: >>> text = "Fred" >>> text.encode("utf-8") b'Fred' In Python 3 you cannot mix str and bytes, so to add a newline your options are >>> (text + "\n").encode("utf-8") # concatenate text b'Fred\n' >>> text.encode("utf-8") + b"\n" # concatenate bytes b'Fred\n' If you want to write only strings it may also be worth trying to wrap the Serial instance into a TextIOWrapper: # untested! import serial import io ser = serial.Serial('/dev/ttyACM0', 9600) serial_device = io.TextIOWrapper(ser) print("Fred", file=serial_device) _______________________________________________ Tutor maillist - Tutor@python.org To unsubscribe or change subscription options: https://mail.python.org/mailman/listinfo/tutor