A more succinct way would be: str(x).encode()
In fact the outer call to ‘bytes’ in 'bytes(str.encode(str(x)))' is a no-op, and python strings are objects which have an ‘encode' method, so no need call the class method ’str.encode’. Another possible way is f"{x:d}".encode() or "{:d}".format(x).encode() which is more “defensive”, in the sense that the conversion fails if x is not an integer. In fact “str(x)” is defined for almost any imaginable object in python, and could return anything. Therefore it is better to be a little more verbose, and be explicit on the fact that here we are interested in a decimal integer. Another variant, in which we accept a float value could be f"{round(x):d}".encode() or f"{x:.0f}" but possibilities are endless. Bye and thank you for sharing. Stefano > On 14 Oct 2020, at 15:08, Mick Sulley <m...@sulley.info> wrote: > > I had a bit of trouble with this and thought it worth sharing the solution. > > With Python2 and pyownet I could use > > owp.write('/settings/timeout/directory', 60) > > but with Python3 that throws an error, TypeError: 'data' argument must be > binary. I can use > > owp.write('/settings/timeout/directory', b'60') > > but if I want to use a variable for the data the format which works is - > > x = 60 > owp.write('/settings/timeout/directory', bytes(str.encode(str(x)))) > > There may be other ways to do it but that works for me. > > Mick > > > > _______________________________________________ > Owfs-developers mailing list > Owfs-developers@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/owfs-developers
_______________________________________________ Owfs-developers mailing list Owfs-developers@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/owfs-developers